2009-07-29 65 views
2

我有一个本地C Dll,它调用'LoadLibrary'来加载另一个启用了/ clr标志的Dll。然后我使用'GetProcAddress'来获得一个函数,并在动态加载的DLL上调用它。我想在调试器中进入动态库,但符号不会加载。任何想法?本机C /托管C++调试

而且,我也要我使用Visual Studio 2008的

更新纷纷表示:由于以下一些技巧,我改变了项目调试混合。它没有工作,但我想我知道为什么。我正在开发一个插件到现有的应用程序。我连接的应用程序启动一个exe,然后开始另一个。所以我必须使用“附加到进程”来启动调试器。我的猜测是启动调试器的方式将默认为“自动”。 有没有办法改变VS的默认行为来使用“混合”调试?

回答

4

这是从VS2008,但如果我没有记错VS2005是类似的。在本地项目的属性中,在“配置属性 - >调试”下,有一个“调试器类型”,默认设置为“自动”。您需要将其更改为“混合”,因为VS不够智能,无法实现您需要进行托管调试

1

我在Visual Studio中做过类似的事情有过混合的经历。您可以考虑使用ProcMon来查看VisualStudio在哪里查找PDB文件。或者,您可以尝试使用WinDbg。它似乎在加载符号方面做得更好,如果不符合,您可以自己显式加载它们。使用WinDbg涉及到一个陡峭的学习曲线,但如果你现在正在燃烧时间,这不值得吗?

您也可以自行运行该exe文件,并从受管dll的源文件中,附加到该进程以对其进行调试。

1

修改混合模式的dll,在它输入您想要调试的第一个代码时抛出一个CLR异常。这应该让您有机会启动托管调试器。

1

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