5

Mã của tôi ném các ngoại lệ chưa được xử lý, nhưng trình gỡ lỗi trong Visual Studio chỉ bị ngắt trên các hệ thống được ném bởi hệ thống. Ví dụ, bên dưới giá trị trả về là getaddrinfo không phải là số không và ngoại lệ của tôi phải được ném trước tiên - trên thực tế, nếu tôi đặt điểm ngắt tại dòng 171, nó bị nhấn - nhưng trình gỡ lỗi chỉ vi phạm lệnh gọi socket .Làm cho Visual Studio bị phá vỡ trên User (std :: exception) Ngoại lệ?

Tôi biết I have to add my own types explicitly, or else check All C++ Exceptions not in this list, trong Exception Settings, nhưng đây là một std::exception Tôi ném, và std::exception kiểm tra.

Làm cách nào để trình gỡ lỗi Visual Studio tự động ngắt trên ngoại lệ của tôi?

enter image description here

Trả lời

3

Các debugger đã phá vỡ trên ném nhưng bạn không hiển thị các chức năng trên cùng trong callstack mà là thực sự nâng cao ngoại lệ.

Nội dung bạn đang hiển thị là chức năng tiếp tục xuống ngăn xếp. Và điều này cho thấy rằng khi hàm đang được gọi trả về dòng tiếp theo sẽ được thực thi là dòng socket(...). Đó là lý do tại sao biểu tượng trên dòng đó là biểu tượng 'return' nhỏ màu xanh lá cây chứ không phải biểu tượng 'execution hiện đang ở đây' màu vàng.

Nhấp chuột phải vào callstack, nhấp vào 'hiển thị mã bên ngoài' và bạn sẽ thấy một cái gì đó như:

KernelBase.dll!RaiseException(unsigned long dwExceptionCode, unsigned long dwExceptionFlags, unsigned long nNumberOfArguments, const unsigned long * lpArguments) Line 904 C 
vcruntime140d.dll!_CxxThrowException(void * pExceptionObject, const _s__ThrowInfo * pThrowInfo) Line 136 C++ 
ConsoleApplication5.exe!main() Line 6 C++ 
ConsoleApplication5.exe!invoke_main() Line 64 C++ 

Lưu ý rằng nó là KernelBase.dll!RaiseException nơi ngoại lệ được thực sự bị ném từ.

Có, tôi có thể đồng ý điều này không phải là rất C++ như nhưng ném ngoại lệ là một cơ chế đòi hỏi mã phức tạp và vì vậy nó xảy ra như thế này.

+0

Tôi hiểu, cảm ơn Mike! – sebf

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