簡體   English   中英

調試信息(斷點等)存儲在VS2013本機C ++ dll項目中的位置在哪里?

[英]Where is location that Debug info (break point, etc) was stored in VS2013, native C++ dll project?

我想知道調試c ++本機dll項目時調試信息的存儲位置。

我的解決方案中有2個項目,C#托管項目和C ++ dll項目。 當我插入斷點本機dll時,vs在dllimport的C#本機調用中運行良好。 而且,我直接將本機dll復制到托管項目中(因此托管項目僅具有用於本機項目的本機dll文件,而沒有pdbfile),也可以在本機調用中停止斷點! 是什么使這成為可能? 托管項目沒有有關本機dll的pdb文件的信息,但似乎vs仍可以訪問本機pdb文件。 任何人都可以解釋嗎?

無論如何啟動應用程序(通過.net),調試非托管dll都是相同的。 無論從哪里加載dll,Visual Studio都會在同一目錄中查找.pdb文件,如果存在該文件,則將其加載。

您可以在輸出窗口(Debug-> Window-> Output)中查看何時發生這種情況。 您將看到類似以下的行:

'<your-exe>.exe': Loaded '<path-to-dll>\<your-dll>.dll', Symbols loaded.

如果您正在編寫.net應用程序,則在.net應用程序項目設置(屬性->調試->啟用調試器)中關閉“非托管代碼調試”時,不會發生任何情況

PDB加載遵循許多規則。 Visual Studio的首次嘗試是假定DLL是在調試機上構建的。 在dll中有對pdb的完全合格的引用。 那條規則正在執行。 稍后,它使用_NT_SYMBOL_PATH變量,並且如果引用了符號服務器,則可以從同一個dll查找pdb的多個版本。

暫無
暫無

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

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