0

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

4

1 回答 1

0

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

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

于 2013-01-25T14:51:28.860 回答