2017-01-26 16 views
0

我是windbg和內存分析的新窗口。 我嘗試分析內存轉儲(崩潰轉儲)它是x64系統。如果我有一些符號警告,我可以使用windbg分析的結果嗎?

加載所有符號(我和微軟) 後I型!analyze -v

這是輸出的一部分:

...... 
FAULTING_SOURCE_CODE: <some code here> 

SYMBOL_STACK_INDEX: 6 

SYMBOL_NAME: rtplogic!CSRTPStack::Finalize+19d 

FOLLOWUP_NAME: MachineOwner 

MODULE_NAME: RTPLogic 

IMAGE_NAME: RTPLogic.dll 

DEBUG_FLR_IMAGE_TIMESTAMP: 58542837 

STACK_COMMAND: ~544s; .ecxr ; kb 

FAILURE_BUCKET_ID: WRONG_SYMBOLS_c0000374_RTPLogic.dll!CSRTPStack::Finalize 

BUCKET_ID: X64_APPLICATION_FAULT_WRONG_SYMBOLS_rtplogic!CSRTPStack::Finalize+19d 
...... 

WRONG_SYMBOLS擔心我。

我可以肯定代碼FAULTING_SOURCE_CODE它是與崩潰有關的代碼嗎?

回答

2

不,不幸的是,你不能相信它。在調用堆棧的分析中至少有一點,如果調試器沒有正確解析堆棧,調試器不能100%確定。

當您鍵入~544s; .ecxr; k時,您會看到一個調用堆棧。該調用堆棧將在其不確定的地方包含警告。您可以信任以前的任何內容,這可能已經有所幫助,但您不能相信警告下的堆棧幀。

您可以將k輸出與dps @ebp進行比較(如果不夠,可以加上L fff),以查看調試器可能猜到的是什麼。

請注意,在dps的輸出中,如果偶然發現某個堆棧上的計算結果可能會被解釋爲符號,那麼您也可能會看到完全不相關的東西。

2

c0000374STATUS_HEAP_CORRUPTION。查看正常轉儲只顯示損壞發生後的代碼。

激活Pageheap與gflags.exe您的exe

enter image description here

PageHeap使Windows功能在每次分配的邊界外匯儲備的內存檢測嘗試訪問內存超出了分配。這會讓應用程序更快崩潰,在這裏您可以看到崩潰的真正原因。打開dmp並運行!analyze -v以查看損壞的內容。

+0

這聽起來很有趣。據我瞭解'gflags'是改變已經運行的進程的一些設置的工具。但在我的情況下內存轉儲不是從我的電腦,我沒有直接訪問遠程PC有問題。是否有可能以其他方式啓用此功能? L例如像編譯期間的調試標誌? –

+0

你必須在應用程序崩潰的PC上激活此設置。 – magicandre1981

+0

@StepanLoginov:請注意,整個頁面堆將爲堆中的每個「int」分配8kB的內存(2頁,1個可訪問的頁面用於觸發調試器,1個不可觸及的頁面用於觸發調試器)。因此,這種方法只能找到> 4kB的泄漏。我發現它很難用於32位程序,因爲它們在發生實際問題之前都會遇到內存不足的問題。它可能適用於你的64位程序。 –

相關問題