Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 本机C/托管C++;调试_C++_Visual Studio_Clr - Fatal编程技术网

C++ 本机C/托管C++;调试

C++ 本机C/托管C++;调试,c++,visual-studio,clr,C++,Visual Studio,Clr,我有一个本机C Dll,它调用“LoadLibrary”来加载另一个打开了/clr标志的Dll。然后我使用“GetProcAddress”获取一个函数,并在动态加载的dll上调用它。我想在调试器中进入动态库,但符号从未加载。有什么想法吗 我应该说我使用的是VisualStudio2008 更新:由于下面的一些提示,我将项目调试更改为混合。它不起作用,但我想我知道为什么。我正在开发现有应用程序的加载项。我连接的应用程序先启动一个exe,然后再启动另一个exe。因此,我必须使用“附加到进程”来启动调

我有一个本机C Dll,它调用“LoadLibrary”来加载另一个打开了/clr标志的Dll。然后我使用“GetProcAddress”获取一个函数,并在动态加载的dll上调用它。我想在调试器中进入动态库,但符号从未加载。有什么想法吗

我应该说我使用的是VisualStudio2008


更新:由于下面的一些提示,我将项目调试更改为混合。它不起作用,但我想我知道为什么。我正在开发现有应用程序的加载项。我连接的应用程序先启动一个exe,然后再启动另一个exe。因此,我必须使用“附加到进程”来启动调试器。我猜启动调试器的方式将默认为“自动”有没有办法将VS的默认行为更改为使用“混合”调试?

我在VisualStudio中做过类似的事情。您可以考虑使用PROMON来查看VisualStudio正在寻找PDB文件。或者,您可以尝试使用WinDbg。它似乎在加载符号方面做得更好,如果没有,您可以自己显式地加载它们。使用WinDbg需要经历一个陡峭的学习曲线,但如果你现在正在浪费时间,这不值得吗


您还可以自行运行exe,并从托管dll的源附加到进程以对其进行调试。

修改混合模式dll以在输入您感兴趣的第一个调试代码时引发CLR异常。这将为您提供启动托管调试器的机会。

在VS2005中,每个项目都有单独启用本机和CLR调试器的选项。您可能需要为启动调试器的本机dll项目启用CLR调试器。

这是从VS2008开始的,但如果我没记错的话,VS2005也是类似的。在本机项目的属性中,在“配置属性->调试”下有一个默认设置为“自动”的“调试器类型”。您需要将其更改为“混合”,因为VS不够聪明,无法意识到您需要托管调试