2012-04-04 100 views
1

使用Visual Studio 2010調試C++項目時,它找不到crt的源代碼。當我試圖進入一個這樣的模塊時,它顯示「No Source Available」。它也不提供Browse的選項,以便我可以幫助它找到源位置。沒有msvcr100d.dll!的源代碼__ CrtDumpMemoryLeaks()

在選項解決方案 - >通用屬性 - >調試源文件下,更新了crt源的正確位置。

由於缺乏crt的源代碼級別的調試,我必須通過反彙編來閱讀這些變得越來越困難。

任何人都可以幫我弄清楚可能會出錯嗎?

請注意**我通過Visual Studio使用外部構建系統來構建我的C++項目。

在漢斯的指導下,我如何縮小問題範圍。

雖然斷點仍然有效,但我列出了所有符號加載信息。我意識到msvcr100d.i386.pdb與dll不匹配。它實際上一路走下來從微軟的公共符號存儲中獲取,當然這些符號被剝離掉了。所以這是我的問題的根源。

這裏是在social.msdn

回答

1

您可以在休息活動時使用Debug + Windows +模塊查看問題的原因。右鍵單擊msvcr100d.dll並選擇「Symbol Load Information」以獲取有關調試器使用的.pdb的信息。

由於某些原因,Microsoft符號服務器提供了一個已刪除源信息的符號服務器。這可能是故意的,與DLL的服務和安全補丁與vc/crt/scr中的源代碼不同步有關。通過發佈到connect.microsoft.com,你可以得到一個真正的答案,而不是猜測。

一種解決方法是用/ MTd而不是/ MDd編譯你的代碼,如果可能的話。項目+屬性,C/C++,代碼生成,運行時庫設置。調試器將使用vc/lib中的.pdb文件。請注意球,調試代碼而不是CRT。

+0

謝謝您的迴應。部分改變編譯器開關會有點困難,因爲它可能會改變行爲,並且完全因爲我正在使用外部構建系統。但是這樣說,你所說的是對我有意義的。時間戳不匹配可能是可能的。我認爲connect.microsoft.com會是這個查詢的理想選擇。再次感謝你。 – Abhijit 2012-04-04 12:38:10

+0

這不是時間戳不匹配。該.pdb有所有源文件和行信息被剝離。對於在發佈模式下構建的DLL,這是非常典型的,例如,Windows DLL的所有.pdbs都是以這種方式發佈的。一點都不,因爲你沒有任何源代碼。但它不是一個發佈模式DLL,你有源:)可能是一個愚蠢的錯誤,連接可以告訴你。 – 2012-04-04 12:43:36

+0

賓果:-)你是對的。我想在pdb和dll之間不匹配的時間戳,但不相信他們實際上剝離了這些符號。這裏是我如何從調試輸出'Loaded'C:\ Windows \ SysWOW64 \ msvcr100d.dll',加載符號(去除源信息)來驗證它。 – Abhijit 2012-04-04 12:48:54

0

類似的問題,你可以找到的CRT源在安裝文件夾,子文件夾VC \ CRT \ SRC。

如果他們不在那裏,您是否在安裝VS2010時安裝了它們? (不確定你是否真的可以選擇這個)。

+0

正如我所提到的源代碼存在於VC \ CRT \ SRC下,但IDE無法找到它。我想知道如何讓IDE知道CRT源的位置 – Abhijit 2012-04-04 11:05:28