2009-09-22 25 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

一般來說,你可以相信你的調用堆棧是正確的。

但是,如果您明確地重新拋出異常,而不是讓它們自然冒出調用堆棧,那麼可以從堆棧跟蹤中隱藏實際的錯誤。

相關問題