簡體   English   中英

本機C /托管C ++調試

[英]Native C/Managed C++ Debugging

我有一個本地C Dll,它調用“ LoadLibrary”來加載另一個已打開/ clr標志的Dll。 然后,我使用“ GetProcAddress”獲取函數並在動態加載的dll上調用它。 我想進入調試器中的動態庫,但是這些符號從不加載。 任何想法?

我應該說我正在使用Visual Studio 2008。

更新:由於以下一些技巧,我將項目調試更改為“混合”。 它沒有用,但是我想我知道為什么。 我正在開發現有應用程序的插件。 我要連接的應用程序啟動一個exe,然后啟動另一個。 因此,我必須使用“附加到進程”來啟動調試器。 我的猜測是以這種方式默認啟動“自動”啟動調試器。 有沒有一種方法可以將VS的默認行為更改為使用“混合”調試?

這是來自VS2008,但是如果我沒記錯的話,VS2005就是類似的。 在本機項目的屬性中,在“配置屬性->調試”下有一個“調試器類型”,默認情況下設置為“自動”。 您需要將其更改為“混合”,因為VS不夠智能,無法意識到您需要托管調試

我在VisualStudio中做類似的事情有混合的經驗。 您可能考慮使用ProcMon來查看VisualStudio在哪里尋找PDB文件。 或者,您可以嘗試使用WinDbg。 似乎在加載符號上做得更好,如果沒有加載,則可以自己顯式加載它們。 使用WinDbg涉及到陡峭的學習曲線,但是如果您現在正在浪費時間,那不值得嗎?

您也可以自己運行exe,並從托管dll的源運行該exe,並將其附加到進程中以對其進行調試。

修改混合模式dll以在輸入您要調試的第一個代碼時引發CLR異常。 這應該給您機會啟動托管調試器。

在VS2005中,每個項目都有一些選項可以分別啟用本機和CLR調試器。 您可能需要為啟動調試器的本機dll項目啟用CLR調試器。

暫無
暫無

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

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