2012-06-15 48 views
0

我在嘗試從發佈文件夾中運行它時,我的應用程序不斷崩潰。如何使用WinDbg中的調試信息

我把日誌裏面的try catch塊和捕獲他們,但他們都指向一種方法。解決問題在我的previous post

然後我決定使用WinDbg並附上可執行文件來檢查究竟是什麼造成我的應用程序崩潰。現在來自WinDbg的信息似乎很模糊。

(13e4.1444): Access violation - code c0000005 (first chance) First chance exceptions are reported before any exception handling. This exception may be expected and handled. *** ERROR: Symbol file could not be found. Defaulted to export symbols for E:\VCS\DeskconWSP\Deskcon\bin\Release\tinyWRAP.dll - eax=0e7e1c00 ebx=0d83d918 ecx=0d835b70 edx=0cce8ce0 esi=0d835b70 edi=ffffffff eip=00000000 esp=0e4dfa4c ebp=0e4dfa58 iopl=0 nv up ei pl nz na po nc cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00010202 00000000 ?? ???

有關如何使用此調試信息的任何引用或指針?

+2

這不是學習基礎知識的好地方。它只是拋出一個NullReferenceException,由非常糟糕的SWIG包裝來充分解釋。 MediaSessionMgr *不可以是HandleRef。典型的SWIG損失btw。至少使用別人的OpenVCS包裝:http://code.google.com/p/openvcs/source/browse/trunk/OpenVCSApp/Sip/Bridge.cs?r=14 –

+0

這是第一次機會例外,所以在至少在這一點上,它不會崩潰你的應用程序。如果這不被處理,它會。正如Hans所說,這很可能是一個NullReferenceException(CLR根據情況將訪問違規映射到NRE)。 –

回答

4
  1. 我的意思是儘可能以最好的方式,但是你需要閱讀機上的WinDbg(見WinDbg A-Z)。它有一個巨大的學習曲線,但一旦你習慣了它,它確實很有用。

  2. 您需要配置WinDbg以加載tinyWRAP.dll的調試信息。應該有一個名爲tinyWRAP.PDB的文件,假設您是該文件的開發人員。打開文件 - >符號路徑並根據需要添加。

  3. Microsoft爲其自己的二進制文件支持符號服務器(即PDB文件)。將此「路徑」添加到WinDbg符號服務器路徑,WinDbg將從MS下載任何內容:SRV * C:\ SymbolServer \ symserver * http://msdl.microsoft.com/download/symbols

  4. 訪問違規意味着程序試圖訪問不應該存在的堆內存;即分配給另一個進程的內存。

例如,如果你在一個指向整數做算術,而不提領先它,你最終指向的變量,其過程可能無法訪問到其他位置。

你幾乎從不會在純粹的託管程序中看到這個,但是如果你正在與本地DLL或代碼交互,那麼這可能會給你一些提示。

+0

訪問衝突並不意味着進程正試圖從另一個進程尋址內存。每個進程都有自己的地址空間。嘗試訪問未分配的地址或其他不可訪問的地址(例如爲空值保留的地址)會導致訪問衝突。 –

+0

好的答案和+1的「巨大的學習曲線」! –