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

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

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

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

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

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

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

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