在我的.NET代码通过dllimport调用非托管dll中的函数之后,有没有办法调试正在发生的事情?

时间:2009-08-27 02:28:15

标签: c# .net dllimport

有没有办法在我的.NET代码通过dllimport调用非托管dll中的函数后调试正在发生的事情?

我在unmanaged via dllimport中暴露了一个dll函数。当我通过代码调用函数时,会发生一些事情并且它永远不会返回。

有什么我可以做的,可能有调试视图或任何东西来获取任何信息?或者我是SOL?

1 个答案:

答案 0 :(得分:6)

嗯,对于初学者,请确保在项目属性的“调试”选项卡中启用了本机代码调试。

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

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

另外,尝试传递不同的参数,从最简单的情况开始,看看你是否得到了相同的行为。最后,请确保您的所有编组元数据都正确无误。