簡體   English   中英

即使為dll加載了調試符號,也會為文檔加載調試符號

[英]Debug symbols are said to be not loaded for a document even though they are loaded for the dll

我已經構建了一個帶有調試信息的特定DLL(編譯器選項/ Zi和鏈接器選項/ DEBUG)。 通過主程序中的中斷語句,我啟動了Visual Studio進行調試。 在Debug-> Windows菜單中顯示的模塊列表中,我可以看到已經為感興趣的dll加載了符號。但是當我從該dll打開C ++文件並嘗試設置斷點時,它表示調試符號不適用於該文檔。 毫無疑問,這個C ++文件被編譯成該dll,並且它與用於構建dll的源相同(我只做了它)。 為什么會這樣? 在我開槍之前請幫忙。

我沒有明確的答案,只有一些建議。

  • 有時mdm.exe(機器調試管理器)停止正常工作。 終止進程並重新啟動Visual Studio會有所幫助。 如果重新啟動之間問題仍然存在,那可能不是原因。

  • 未來的源文件時間(最后修改)會導致各種奇怪的問題。 要檢查文件時間,您可以搜索任何內容(Windows XP)或“*”(Windows 7)。 這將列出所選文件夾中的所有文件。 然后按日期對結果進行排序以查看最大/最小文件時間。 不知道不正確的文件時間來自哪里 - 我只是知道它不時發生。 可能是Visual Studio本身,可能是我正在使用的其他工具。

  • 您可以嘗試啟動從Visual Studio使用DLL的應用程序,並且您的DLL項目已經打開。 為此,打開“配置屬性”,選擇“調試”頁面,然后輸入應該啟動的.exe(如果需要,則輸入+參數)。 然后像啟動.exe項目一樣啟動調試會話。

  • 解決Visual Studio的許多問題是手動“清理”項目,並進行完全重新編譯。 刪除在構建過程中生成的所有文件或存儲解決方案或項目“選項”的所有文件。 即所有.suo .ncb .user文件以及“intermediate”和“output”文件夾中的所有內容。 如果您正在使用源代碼管理,只需將源代碼管理系統中的整個項目檢索到一個干凈的目錄中,然后從頭開始重新構建。 (從源代碼控制中獲取所有“新鮮”也可以解決任何潛在的文件時間問題 - 至少對於不保留文件時間的源代碼控制系統而言)

  • 另一個可能的原因是,VS加載了錯誤的.pdb文件。 可以在為VS配置的符號服務器/符號目錄(或通過_NT_SYMBOL_PATH變量的系統范圍)或VS符號緩存目錄中找到具有匹配名稱的.pdb文件。 具有匹配名稱的.pdb文件如何出現在這樣的位置是一個不同的故事,但可以輕松檢查是否加載了錯誤的.pdb文件:刪除構建生成的.pdb文件,並啟動調試會話。 如果VS跟蹤有問題的.exe / .dll的“符號加載”,它必須在其他位置找到.pdb文件。

  • 有時VS似乎以某種方式搞亂了斷點位置。 我不確切知道何時或如何發生,但其中一個症狀是,如果刪除一些斷點,它們會在啟動下一個調試會話時神奇地重新出現。 我發現設置一個新的斷點,然后通過Debug / Delete All Breakpoints刪除所有斷點,並重新設置所需的斷點有幫助。

就我而言,我已經重命名了C ++項目。 編譯器輸出newName.lib而我的其他項目仍然引用oldName.lib ,當然不會被oldName.lib Build->Clean刪除。

我通過遵循手動清理構建目錄的建議找到了這個。 后續鏈接器unresolved external reference消除了這種情況。

1)你根本不能打破斷點嗎? 通常,一旦需要命中模塊或堆棧幀中的代碼,它就會得到解決。 2)檢查您的pdb是否沒有剝離源信息

做一個Build-> Clean Solution,關閉visual studio然后重新啟動它並進行新的構建。 這件事發生在我之前,我想這似乎解決了它,只是一些過時的pdb信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM