2010-06-23 98 views
0

我正在嘗試解決僅在生產中發生的C++ exe運行時錯誤問題。我是C++和windbg的新手,但我正在這裏粘貼這個函數。我會非常感謝,如果有人能指出我如何以及在什麼情況下發生這個錯誤,更重要的是我該如何找出哪一行代碼導致它。我讀了很多論壇,但如果我打開VS 2008中的dmp文件,我在本地有一個pdb文件,本地exe文件,但我永遠不能啓用轉到源代碼菜單選項。快速回復如何分析這個.dmp文件和如何理解它,將不勝感激..謝謝!分析.dmp文件


  • *
  • 異常分析*
  • *

GetPageUrlData失敗,服務器返回的HTTP狀態404 URL請求:http://watson.microsoft.com/StageOne/MYServer_exe/0_0_0_0/MyServer_exe/0_0_0_0/000194ab.htm?Retriage=1

FA ULTING_IP: MYSERVER + 194ab 004194ab c6040100 MOV字節的ptr [ecx中+ EAX],0

EXCEPTION_RECORD:FFFFFFFF - (.exr 0xffffffffffffffff) ExceptionAddress:004194ab(MYSERVER + 0x000194ab) ExceptionCode:0000005(訪問衝突) ExceptionFlags:00000000 NumberParameters:2 參數[0]:00000001 參數[1]:00000000 嘗試寫入到地址00000000

DEFAULT_BUCKET_ID:NULL_POINTER_WRITE

PROCESS_NAME:Myserver.exe

ERROR_CODE:(NTSTATUS)0xc0000005 - 0x%08lx處的指令引用0x%08lx處的內存。內存不能是%s。

EXCEPTION_CODE:(NTSTATUS)0xc0000005 - 0x%08lx處的指令引用0x%08lx處的內存。內存不能是%s。

EXCEPTION_PARAMETER1:00000001

EXCEPTION_PARAMETER2:00000000

WRITE_ADDRESS:00000000

FOLLOWUP_IP: MYSERVER + 194ab 004194ab c6040100 MOV字節的ptr [ecx中+ EAX],0

MOD_LIST:

NTGLOBALFLAG:0

APPLICATION_VERIFIER_FLAGS:0

FAULTING_THREAD:000004e0

PRIMARY_PROBLEM_CLASS:NULL_POINTER_WRITE

BUGCHECK_STR:APPLICATION_FAULT_NULL_POINTER_WRITE

LAST_CONTROL_TRANSFER:從00418a4e到004194ab

STACK_TEXT: 警告:堆棧放鬆信息不可用樂。以下框架可能是錯誤的。 087ffa74 00418a4e 0a73b070 087ffc6c 087ffd8c MYSERVER + 0x194ab 087ffb64 00410767 0a73b070 087ffd74 087ffd8c MYSERVER + 0x18a4e 087ffc6c 0041089b 0a73b0f8 0a727a78 0a73b108 MYSERVER + 0x10767 087ffd74 00433913 0a73b0f8 0a727a78 0a73b108 MYSERVER + 0x1089b 087ffe58 0042fbf3 0a73b0f8 0a727a78 00000044 MYSERVER + 0x33913 087fffb8 7d4dfe37 000006a0 00000000 00000000 MYSERVER + 0x2fbf3 087fffec 00000000 0042fae0 000006a0 00000000 KERNEL32 BaseThreadStart + 0x34

SYMBOL_STACK_INDEX:0

SYMBOL_NAME:MYSERVER + 194ab

FOLLOWUP_NAME:MachineOwner

MODULE_NAME:MYSERVER

IMAGE_NAME:Myserver.exe

DEBUG_FLR_IMAGE_TIMESTAMP:4c2123df

STACK_COMMAND:〜86S; .ecxr; KB

FAILURE_BUCKET_ID:NULL_POINTER_WRITE_c0000005_Myserver.exe未知

BUCKET_ID:APPLICATION_FAULT_NULL_POINTER_WRITE_Myserver + 194ab

跟帖:MachineOwner

回答

1

k會給你一個線程停止當前的堆棧跟蹤。
~*kb會給你的堆棧跟蹤的所有線程的

符號

你可能想設置符號搜索路徑包括MS的符號,這將允許更好的堆棧跟蹤。

您可以使用此.sympath srv*C:\Symbols*http://msdl.microsoft.com/download/symbols各做一次以上的永久設置_NT_SYMBOL_PATH環境VAR(比方說作爲一個系統變量)srv*C:\Symbols*http://msdl.microsoft.com/download/symbols

您可能需要獲取符號使用以下重新加載。

.symfix+ c:\symbols 
.reload /f 

崩潰線

EXCEPTION_RECORD:FFFFFFFF - (.exr 0xffffffffffffffff)ExceptionAddress:004194ab FAULTING_IP:MYSERVER + 194ab 004194ab c6040100 MOV字節的ptr [ecx中+ EAX],0

如果你想要的只是崩潰的行,那麼就有一個應用程序'CrashFinder',它將加載你的應用程序和pdb,並允許你輸入這個004194ab來報告崩潰的行。

0

您還可以使用頂層菜單(我認爲它是說設置符號路徑和設置源路徑),設置您的應用程序PDB的符號路徑和源代碼的源路徑。

對於崩潰轉儲,一旦你已經設定了符號和源文件路徑,並加載了該轉儲文件,你會發現有用的命令:!analyze -v

而且從你粘貼的報告,檢查線路:STACK_COMMAND: ~86s; .ecxr ; kb這條線告訴你導致故障的線程(86)。剛剛通過該行進入命令窗口獲取該線程的堆棧:~86s; .ecxr ; kb

0

如果您對VS更加適應,請不要放棄它。你看到反彙編和堆棧,只缺少符號?你是否點擊你的模塊的堆棧幀,但仍然看不到任何代碼?你甚至可以看到你的模塊內的堆棧框架?你有沒有建立對MS公共符號的訪問? (無論如何,即使使用WinDbg也是如此)。 WinDbg會報告堆棧符號嗎? (他們沒有列在你粘貼的代碼片段中)。如果不是,它很可能是一個符號問題。有幾種方法可以在WinDbg和VS上進行診斷。你檢查了你想調試的模塊的'符號加載信息'嗎? (VS中最簡單的方法是在模塊窗口右鍵單擊模塊)。

根據這些問題的答案的任意組合給出建議。如果你提供更多的細節,它可以幫助集中建議。