4

在我的 .NET 代码通过 dllimport 调用非托管 dll 中的函数后,有什么方法可以调试发生的事情?

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

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

4

1 回答 1

6

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

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

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

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

于 2009-08-27T03:40:06.373 回答