2010-04-12 28 views
7

Tôi đang cố gắng gỡ lỗi chương trình bất ngờ tắt. Khi tôi nói "tắt đi, tôi có nghĩa là một khoảnh khắc tôi thấy tất cả các cửa sổ được hiển thị, mỗi cửa sổ hiển thị tất cả các dữ liệu đúng, sau đó đột nhiên tất cả các cửa sổ biến mất. Không có hộp thư báo cáo bất cứ điều gì sai. Vì vậy, tôi đã cố gắng chạy chương trình trong trình gỡ lỗi hy vọng rằng nó sẽ bằng cách nào đó cái bẫy bất cứ điều gì đã gây ra chương trình để hủy bỏ, nhưng ngay cả trong trình gỡ lỗi chương trình chỉ đơn giản là kết thúc đột ngột dòng cuối cùng trong trình gỡ lỗi là:.Chương trình kết thúc đột ngột ngay cả trong trình gỡ lỗi - điều đó xảy ra như thế nào?

The program '[5500] test.exe: Native' has exited with code 0 (0x0). 

chương trình của tôi, mà là cực kỳ Nghi ngờ của tôi là có lẽ một thử nghiệm tự đã thất bại và có lẽ tôi chỉ gọi là "exit()", quên để bật lên một hộp thoại giải thích lý do tại sao

My que stion bây giờ là, làm thế nào tôi có thể tìm ra từ điểm nào trong mã, chương trình của tôi bỏ?

+1

Một trong các giải pháp là tìm kiếm tất cả mã cho các cuộc gọi đến các chức năng như exit() và đặt điểm ngắt tại đó. Thực sự nếu bạn có cuộc gọi để thoát() unwrapped nó là một dấu hiệu của thiết kế xấu - bạn nên có một hàm wrapper cho thấy một tin nhắn và sau đó gọi exit(). – sharptooth

Trả lời

4

Câu trả lời của Marcelo thật tuyệt vời. Nếu vì lý do nào đó bạn không thể phá vỡ exit, hãy cài đặt một hàm (không có đối số, trả về void) với atexit và ngắt trong đó.

5

Đặt điểm ngắt trên exit()terminate() (có thể một cuộc gọi khác, nhưng tôi không chắc chắn).

+0

temrniate() gọi abort(), không thoát(). – sharptooth

+0

@Marcelo Cantos: Bạn nói "Đặt điểm ngắt trên lối ra()" như thể tôi chỉ có một trong số họ ... nhưng có hàng trăm. Bạn có đề nghị tôi bằng cách nào đó đặt một breakopoint * trong * exit()? – Mick

+0

@Mick: trong trình gỡ rối dòng lệnh, 'ngắt thoát' sẽ thực hiện điều đó. – Potatoswatter

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