Tôi đang tìm câu trả lời trong MS VC++.Tìm ra nguồn gốc của một ngoại lệ trong C++ sau khi nó bị bắt?
Khi gỡ lỗi một ứng dụng C++ lớn, rất tiếc là có rất nhiều trường hợp sử dụng ngoại lệ C++. Đôi khi tôi bắt một ngoại lệ một chút sau đó tôi thực sự muốn.
Ví dụ trong mã giả:
FunctionB()
{
...
throw e;
...
}
FunctionA()
{
...
FunctionB()
...
}
try
{
Function A()
}
catch(e)
{
(<--- breakpoint)
...
}
tôi có thể bắt ngoại lệ với một breakpoint khi gỡ lỗi. Nhưng tôi không thể theo dõi lại nếu ngoại lệ xảy ra trong FunctionA()
hoặc FunctionB()
hoặc một số chức năng khác. (Giả sử sử dụng ngoại lệ rộng rãi và một phiên bản rất lớn của ví dụ trên).
Một giải pháp cho vấn đề của tôi là xác định và lưu ngăn xếp cuộc gọi trong hàm tạo ngoại lệ (tức là trước khi bị bắt). Nhưng điều này đòi hỏi tôi phải lấy tất cả các ngoại lệ từ lớp ngoại lệ cơ sở này. Nó cũng sẽ đòi hỏi rất nhiều mã, và có lẽ làm chậm chương trình của tôi.
Có cách nào dễ dàng hơn đòi hỏi ít công việc hơn không? Mà không cần phải thay đổi cơ sở mã lớn của tôi?
Có giải pháp nào tốt hơn cho vấn đề này bằng các ngôn ngữ khác không?
thực sự ngăn xếp không được bỏ cho đến khi tất cả các trình xử lý bắt được yêu cầu. (c + + ngoại lệ mô hình, thực hiện trên cửa sổ SEH, làm cho một vài đi qua chuỗi ngoại lệ SEH). và hoàn toàn có thể lấy được nguồn gốc của ngoại lệ (ví dụ trong trình gỡ lỗi) nằm bên trong bắt này. – deemok