2012-07-19 33 views
12

Tôi đang nghiên cứu phát triển phần mềm trong C++ trên Visual Studio 2010. Vì phần mềm này nên chạy trên các máy chủ mà không có sự tương tác của con người, tôi thực sự cần phải loại bỏ điều này "program.exe đã ngừng hoạt động "cửa sổ bật lên trong phiên bản phát hành trong trường hợp có lỗi. Tôi chỉ muốn chương trình chấm dứt (có thể cũng đưa ra một thông báo lỗi, nhưng không nhất thiết) và không có nó vẫn bị chặn chờ đợi một người nào đó nhấp vào nút "Đóng chương trình". Tôi phải đề cập đến rằng tôi có 64 bit Windows 7 Professional trên máy tính của mình.Làm thế nào để tránh "program.exe đã ngừng hoạt động" cửa sổ trong chế độ phát hành trên cửa sổ?

Tôi đã đọc về một vài điều, chẳng hạn như:

  • chức năng _set_abort_behavior. Điều này giải quyết các trường hợp khi hủy bỏ() được gọi, nhưng đó không phải là trường hợp cho các lỗi như "vector subscript ra khỏi phạm vi".

  • Tôi biết tôi có thể giải quyết một số lỗi này bằng cách thực hiện xử lý ngoại lệ, nhưng không phải tất cả các lỗi đều là ngoại lệ, do đó điều này sẽ không giải quyết được toàn bộ vấn đề của tôi.

  • Tôi cũng đã đọc điều gì đó về trình gỡ lỗi Dr. Watson, ứng dụng này sẽ tự động chấm dứt ứng dụng, nhưng tôi có ấn tượng rằng trình gỡ rối này không có sẵn cho Windows 7. Plus Tôi không biết điều này trình gỡ rối sẽ giải quyết vấn đề của tôi ở chế độ phát hành ...

  • Tôi không thấy rằng vô hiệu hóa Báo cáo lỗi trên toàn bộ máy của tôi là một lựa chọn thanh lịch, mặc dù tôi đọc rằng đây cũng có thể là một lựa chọn thay thế Tôi muốn lấy).

Làm cách nào tôi có thể thực hiện việc này trong Visual Studio? Có bất kỳ cài đặt nào tôi có thể sử dụng không?

Có cách nào để biến tất cả các lỗi trong trường hợp ngoại lệ trong Visual Studio, để tôi có thể giải quyết vấn đề với cơ chế xử lý ngoại lệ không? (xin vui lòng được khoan dung nếu đây là một câu hỏi ngu ngốc)

Tôi mong được đề xuất của bạn. Cảm ơn vì bạn đã dành thời gian!

Trân trọng, Cornelia

+2

Cách tốt nhất là loại bỏ bất kỳ điều gì gây ra sự cố ngay từ đầu. – chris

+0

"Tôi cũng đã đọc một số thông tin về trình gỡ rối Dr. Watson, ứng dụng này sẽ tự động chấm dứt ứng dụng" - Đây là cách sử dụng "đặc biệt" cho trình gỡ rối (trong đó tôi chưa bao giờ nghe nói đến, trình gỡ lỗi có thể tự động bắt đầu trong trường hợp lỗi ứng dụng). Và chắc chắn không phải cho chế độ phát hành. – SChepurin

+0

@ Chris: đó là câu trả lời rõ ràng! Nhưng vấn đề thực tế là khi ứng dụng đang chạy trên một số máy chủ ở đâu đó và nó gặp lỗi và sự cố, nó vẫn treo và tôi không biết liệu nó có thực sự vẫn đang chạy hay bị kẹt hay không (không thực hiện một số loại trình theo dõi phụ thuộc nền tảng) hệ thống phụ trợ, đó không phải là những gì tôi muốn!). Vì vậy, tôi muốn các ứng dụng đóng cửa sau khi encoutering lỗi và sau đó tôi có thể kiểm tra các tập tin đăng nhập và thấy rằng nó bất ngờ ngừng làm việc và vì vậy tôi sẽ biết rằng tôi có một vấn đề. –

Trả lời

19

Bạn có thể sử dụng

SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX); 

MSDN documentation for SetErrorMode

Bạn cũng có thể refer here

Hy vọng điều này sẽ giải quyết vấn đề của bạn ...

+0

Cảm ơn bạn, điều này đã giải quyết được vấn đề của tôi! –

+0

Cảm ơn! <3 <3 <3 <3 –

+0

Cảm ơn, đó là điều tôi muốn :) –

0

Cách tốt nhất là thêm bộ lọc ngoại lệ chưa được xử lý của bạn (xem SetUnhandledExceptionFilter() tài liệu) và sau đó viết nhật ký và một vùng nhỏ để bạn có thể thực hiện bất kỳ thao tác xử lý lỗi nào (ví dụ thiết bị/tay cầm gần) và bạn cũng gặp sự cố đổ mà bạn có thể phân tích sau này.Thông tin hữu ích trong câu trả lời này: https://stackoverflow.com/a/1547251/188414

+0

Cảm ơn bạn đã trả lời. Giải pháp trước đã giải quyết được vấn đề của tôi. Nhưng chỉ cho sự tò mò của tôi, SetUnhandledExceptionFilter() này, nó có hoạt động cho tất cả các lỗi hay chỉ là các ngoại lệ? Vấn đề là trong C++ không phải tất cả các lỗi đều là các ngoại lệ (ví dụ như trong Java), ví dụ các lỗi đến từ một hành vi không xác định không phải là ngoại lệ. –

+0

Trong native C++ trên Windows có hai loại ngoại lệ - ngoại lệ C++ thông thường nhưng cũng có ngoại lệ cấu trúc dành riêng cho windows. Đây có thể bắt lỗi thời gian chạy như cuộc gọi chức năng ảo tinh khiết và vi phạm truy cập mà bạn không thể bắt trong C++ thông thường. Điều này cho phép ứng dụng của bạn có cơ hội dọn dẹp trong trường hợp có lỗi nghiêm trọng. Xem thêm trong MSDN: http://msdn.microsoft.com/en-us/library/windows/desktop/ms680657%28v=vs.85%29.aspx –

+0

Rất thú vị, cảm ơn. Tôi sẽ xem xét nó. –

-1

Đôi khi lỗi này xảy ra chỉ vì bạn chưa thêm một dấu & trước giá trị mà bạn đã sử dụng trong scanf

Hãy thử những điều sau đây mà giải quyết vấn đề của tôi

Từ

scanf("%d",code); 

Để

scanf("%d",&code); 
Các vấn đề liên quan