有什么方法可以调试我的 .NET 代码通过 dllimport 调用非托管 dll 中的函数后发生的情况吗?
我通过 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 http://www.microsoft.com/whdc/devtools/debugging/symbolpkg.mspx)。您还可以多次暂停和继续调试器,以查看调用堆栈在各个执行点的情况。从这些信息中,您也许能够了解出了什么问题。
另外,尝试传递不同的参数,从最简单的情况开始,看看是否会得到相同的行为。最后,绝对确保所有编组元数据正确。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)