使用_get _purecall处理程序时如何在发布应用程序中获取调用堆栈

时间:2013-01-25 03:13:08

标签: c++ c windows windbg

我的代码有时会运行到“纯函数调用”错误,所以我使用_set_purecall_handler来注册一个处理程序。在调试模式下,我可以使用StackWalker获得完整的callstack,但在发布模式下,StackWalker显示的信息很少。我尝试使用MiniDumpWriteDump并设置ExceptionPointers = NULL。崩溃后我得到了一个转储文件,但vs无法调试它并显示:         找不到指定的模板。请检查完整路径是否正确 无论如何在这种情况下从已发布的应用程序获取信息?

1 个答案:

答案 0 :(得分:0)

通常,人们可以猜测通过将子类的vtable与抽象类的vtable匹配来调用的方法 - 抽象类的vtable有一堆pure_call处理程序用于虚函数而没有实现。

关于方法调用你需要知道的一切都在堆栈和寄存器中 - 只需看一下调用站点的反汇编,注意用于从vtable中检索函数的偏移量,转储已故对象的实际vtable - 你可以通过反汇编构造函数来查找`vftable'来查找它。然后使用 dds 进行简单检查应该提供您需要知道调用哪个方法的所有信息(但不是为什么对象消失了:o)