我的Visual C ++应用程序使用/ EHA选项编译,让我捕捉结构化的exception(除以零,访问冲突等)。 然后,我使用_set_se_translator()将这些exception转换为我自己的exception类。 我的目标是改进我们对这些types例外的logging。
我可以从EXCEPTION_RECORD结构中获取exception的types,以及exception地址。 我希望能够收集更多的信息,如抛出exception的源文件/位置,调用堆栈等。这可能吗?
我在结构化exception上创build了一个exception小型转储 – 是否有一个工具来自动获取调用堆栈?
调用堆栈和所有其他异常信息可以使用minidump验尸调试:
http://www.codeproject.com/KB/debug/postmortemdebug_standalone1.aspx
AFAIK,在没有.pdb文件的情况下,在日志中生成堆栈信息是不可能的。 通常.pdb文件未安装在客户端计算机上。
我的一个想法是在一些不同的线程中使用不同的翻译器函数(每个线程有一个翻译器函数),所以我可以知道从哪个线程抛出了结构化的异常。
这不太实际,因为你不能传递任何参数给翻译器函数,所以你需要一堆不同的翻译器函数。