2009-09-22 82 views
0

如何识别调试程序在程序崩溃时显示的调用堆栈可能是错误的和误导的。例如,当callstack表示以下帧可能丢失或不正确时,这实际上意味着什么?还什么在调用堆栈函数调用后的+号表示:如何知道我的调用堆栈是错误的?

KERNEL32调用LoadLibrary + 0x100字节的

如果这个数字是对我很重要,是不是真的,如果这个数字是很大的调用堆栈可能不正确?

很抱歉,如果我问一些小事和明显

谢谢大家

回答

1

首先:第二个:kernel32!LoadLibrary + 0x100 bytes意味着该电话是从函数调用LoadLibrary(偏移:+100字节);显然没有完全确定来电者的符号信息。这本身没有理由使得堆栈被破坏。

如果函数覆盖栈上的值(例如缓冲区溢出,这可能会显示为'0x41445249'(如果它是我的名字来覆盖它)作为调用函数,调用堆栈可能会被破坏您的程序存储器范围

诊断崩溃原因的一种方法是对调用堆栈标识的函数设置断点或使用调试器进行回溯(取决于调试器&系统)。指出哪些参数包含在调用中,指针通常是一个好的开始(NULL指针,未初始化的指针),祝你好运

+0

是不是0x100实际上是一个256字节的偏移量? – 2009-09-22 13:43:35

2

一般来说,你可以相信你的调用堆栈是正确的。

但是,如果您明确地重新抛出异常,而不是让它们自然冒出调用堆栈,那么可以从堆栈跟踪中隐藏实际的错误。

相关问题