2010-09-25 34 views
7

Một trong các chương trình của tôi bị lỗi định kỳ, nhưng tôi không biết tại sao. Tôi đang chạy nó trong chế độ gỡ lỗi, nhưng không có gì bật lên. Chương trình chỉ đột nhiên thoát. Tôi đã có lỗi khác mà ném một ngoại lệ ... nhưng không phải cái này. Có một cách kỳ diệu để bắt nó hay gì đó không?Làm thế nào để gỡ lỗi một chương trình khi nó treo w/out ngoại lệ?

Trả lời

8

Có lẽ bạn đang chạy nó từ bên trong Visual Studio và vì lý do nào đó, nó không dừng lại trong trình gỡ lỗi với ngoại lệ không bắt buộc, trong trường hợp đó bạn có thể thử bắt gặp sự cố từ bên ngoài Visual Studio. Xem câu trả lời của tôi tại System.AccessViolationException from unmanaged code?, cụ thể là how to capture a crash dump.

Nếu nó chỉ gặp sự cố định kỳ, nhưng trong một khoảng thời gian hợp lý, hãy bắt đầu với Sysinternals procdump. Bắt đầu thực thi của bạn từ Visual Studio bên ngoài, sau đó chạy:

procdump -e <YourExecutableNameOrPid> 

và chờ cho nó để thu hoạch một đổ sụp đổ - giả sử nó thoát do một ngoại lệ unhandled - sau đó tải đổ sụp đổ vào VS 2010 hoặc WinDbg.

+0

bạn sẽ làm gì nếu bạn có AccessViolationException trong ứng dụng .NET 4 thực sự truy cập khối catch bất ngờ? Vâng, điều này thực sự đang xảy ra với tôi ngay bây giờ. Không thể tin được. Lên kế hoạch hỏi một câu hỏi StackOverflow riêng biệt nhưng trước tiên tôi đã đọc câu trả lời này. Bởi vì các ứng dụng không sụp đổ, không có bãi rác sụp đổ để có, phải không? –

+1

@JohnZabroski Tôi sẽ dự phòng gỡ lỗi với WinDbg và SOS [EX]. Xem câu trả lời khác của tôi được liên kết ở trên. –

+0

Cảm ơn, tôi đã mô tả chi tiết vấn đề của tôi ở đây: http://stackoverflow.com/questions/39378849/what-to-do-when-accessviolationexception-in-net-4-app-defies-msdn-documented-be –

4

Chương trình chỉ đột nhiên thoát

chắc chắn kiểm tra mã của bạn, hoặc một trong các libs bạn sử dụng, không gọi exit() (yeah có vẻ quá đơn giản, nhưng chúng ta giờ một lần bị mất truy tìm các chương trình ngẫu nhiên tắt máy quay lại các lệnh exit() ..). Nếu vậy, hãy đặt điểm ngắt tại đó hoặc thay đổi để ném(), sau đó chạy lại. Nếu không, câu trả lời của Sean có vẻ hợp pháp.

+0

Chúng tôi đã có vấn đề chính xác này một lần và nó đã cho chúng ta lứa tuổi để tìm ra. Nó đáng để kiểm tra. –

+0

Ngoài ra, bạn nên đặt điểm ngắt hoặc một số câu lệnh tường trình làm dòng cuối cùng trong main()/winmain(). Có thể chương trình chấm dứt "bình thường" do đó một cách bất ngờ. –

+0

@Red: Đó là một ứng dụng GUI WPF ... tất cả các mã trong các sự kiện, tôi không nghĩ rằng nó sẽ bao giờ đạt đến kết thúc. @stijn: Khá chắc chắn tôi đã không viết bất kỳ cuộc gọi thoát nào, nhưng tôi sẽ kiểm tra lại. – mpen

Các vấn đề liên quan