2009-08-27 33 views
4

有没有什么办法可以调试我的.NET代码通过dllimport调用非托管dll函数后发生了什么?有没有什么办法可以调试我的.NET代码通过dllimport调用非托管dll函数后发生了什么?

我在非托管通过dllimport内公开dll函数。当我在代码中调用一个函数时,会发生一些事情,并且它永远不会返回。

有什么我可以做的,也许有调试视图或任何获得任何信息?或者我是SOL?

+0

你有源代码的DLL吗?或者它是.pdb? – 2009-08-27 02:38:11

+0

在这种情况下,我既没有。 – Matt 2009-08-27 03:19:05

回答

6

对于初学者来说,确保在项目属性的Debug选项卡中启用了本地代码调试。

如果您有要调用的DLL的源代码,那么您应该能够进行设置,以便您可以像托管代码一样进入本机DLL。最简单的方法是在同一解决方案中添加本机DLL的源代码,然后链接到该项目的输出。您需要确保Visual Studio在运行C#应用程序时可以访问本机DLL和该DLL的pdb。

如果你没有DLL的源代码,那么我建议在调用本地方法之前设置一个断点。然后,让程序继续并在一两秒钟后手动暂停程序。确保您仍在查看调用本机DLL的同一线程,然后查看调用堆栈查看器。如果您看到一行标有“[外部代码]”的行,请确保在上下文菜单中选中“显示外部代码”。当选中该选项时,调用堆栈可能会告诉您当前正在执行哪种方法。文本将呈灰色,表示该方法位于外部DLL中。如果您正在进行Windows方法调用,那么首先安装Windows符号文件可能允许调试器为您提供更多信息(http://www.microsoft.com/whdc/devtools/debugging/symbolpkg.mspx)。您也可以暂停并继续调试器多次,以查看调试堆栈在各个执行点的外观。从这些信息中,您可能能够了解发生了什么问题。

另外,尝试传递不同的参数,从最微不足道的情况开始,看看是否得到相同的行为。最后,请确保您拥有所有编组元数据正确。

+0

完全答案谢谢! – Matt 2009-08-27 04:39:44

相关问题