我试图让一个使用许多第三方库的大型跨平台项目更容易实现验尸生活。在Linux上,我使用backtrace()
将backtrace / callstack转储到控制台。在Windows上,我使用EXCEPTION_POINTERS
创建一个minidump和StalkWalker
类来将callstack转储到控制台。现在,在Windows上注册了所有特定于平台的信号处理程序并启用了SEH,我会捕获并报告许多有用的信息,最重要的是,报告坏事发生的位置的文件和行号。但是,在callstack中,我注意到我实际上从未获得任何throw
语句的位置,只是它被捕获的位置,即catch
块。可以想象,如果您的try-catch
包含大量的代码,那么捕获的异常并不是非常有用。那么,为什么呢?
现在针对明显的后续问题:如何将throw
语句的位置放入我的callstack控制台转储中?
我会阻止任何试图告诉我将所有throw
语句更改为包含__FILE__
和__LINE__
宏的自定义例外的人。请回头看我的开头句。因此,throw
的当前用途不会改变。