Debugging 如何知道我的调用堆栈是错误的?

Debugging 如何知道我的调用堆栈是错误的?,debugging,Debugging,当我的程序崩溃时,如何识别调试器显示的调用堆栈可能是错误的和误导性的。例如,当callstack表示以下帧可能丢失或不正确时,这实际上意味着什么?此外,调用堆栈中函数调用后的+数字表示: 内核32!LoadLibrary+0x100字节 这个数字对我来说重要吗?如果这个数字很大,调用堆栈可能不正确,这是真的吗 对不起,如果我问的是一些琐碎和明显的问题 感谢大家从第二个开始:kernel32!LoadLibrary+0x100字节表示调用来自函数LoadLibrary(偏移量:+100字节);显然

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

内核32!LoadLibrary+0x100字节

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

对不起,如果我问的是一些琐碎和明显的问题


感谢大家从第二个开始:
kernel32!LoadLibrary+0x100字节
表示调用来自函数LoadLibrary(偏移量:+100字节);显然,没有确切识别呼叫者的符号信息。这本身并不是调用堆栈损坏的原因

如果函数覆盖堆栈上的值(即缓冲区溢出),则调用堆栈可能会损坏。这可能显示为调用函数“0x41445249”(如果是我的名字覆盖它)。这超出了程序内存范围


诊断崩溃原因的一种方法是在调用堆栈标识的函数上设置断点。或者使用调试器进行回溯(取决于调试器和系统)。找出调用中包含的参数很有趣。指针通常是一个良好的开端(空指针、未初始化指针)。祝你好运。

从第二个开始:
kernel32!LoadLibrary+0x100字节
表示调用来自函数LoadLibrary(偏移量:+100字节);显然没有确切标识调用方的符号信息。这本身并不是调用堆栈损坏的原因

如果函数覆盖堆栈上的值(即缓冲区溢出),则调用堆栈可能会损坏。这可能显示为调用函数“0x41445249”(如果是我的名字覆盖它)。这超出了程序内存范围


诊断崩溃原因的一种方法是在调用堆栈标识的函数上设置断点。或者使用调试器进行回溯(取决于调试器和系统)。找出调用中包含的参数很有趣。指针通常是一个良好的开端(空指针、未初始化指针).祝你好运。

通常,你可以相信你的调用堆栈是正确的


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

通常,您可以相信您的调用堆栈是正确的


但是,如果您显式地重新抛出异常,而不是允许它们自然地在调用堆栈中冒泡,那么实际错误可以从堆栈跟踪中隐藏。

0x100实际上不是256字节的偏移量吗?0x100实际上不是256字节的偏移量吗?