c# - 调试从非托管 C++ 调用的托管 .NET 代码

标签 c# c++ visual-studio visual-studio-2010 debugging

我已经通读了 SO 上可用的解决方案,但到目前为止还没有解决我的问题。我的启动项目是一个非托管 C++ 项目(我们称之为 TestWrapper)。目标是让 TestWrapper 调用托管 C++ 项目,然后调用我的 C# 项目。这工作正常,我运行它没有问题。

但是,我的 C# 代码中出现异常。由于某种原因,断点没有命中,实际的调试中断发生在 ntdll.dll 内部。我已尝试右键单击 C# 项目并启用非托管调试,但这并不能解决问题。如果有人能指出我的解决方案,我将不胜感激。

我继续并包括项目布局:

TestWrapper (unmanaged C++) -> ManagedWrapper (managed C++) -> MyCSharpProject (C#)

我觉得它在于调试的配置,但我的知识还不够,甚至不知道从哪里开始看。

最佳答案

调试器必须决定启动时是调试 native 代码、托管代码还是 native + 托管代码。因此,您必须更改启动项目的调试器设置,而不是您遇到问题的 DLL。尝试以下操作

  • 右键单击该项目并选择“属性”
  • 导航到配置属性 -> 调试
  • 将调试器类型切换为混合

调试器设置甚至包含在 Visual Studio 的 DLL 项目中,这有点误导人。它对系统没有任何影响。

关于c# - 调试从非托管 C++ 调用的托管 .NET 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7124294/

相关文章:

c# - 如何在 C# 中使用 Windows 服务调用 Windows 应用程序?

c# - 加密/解密数据最安全的方法是什么?

c++ - 字符串连接期间可能的缓冲区溢出

在 C++ 中通过引用将枚举作为默认参数传递时出现 C++ 错误

c++ - 使用字符串数组 : arrays of pointers - Are they like multidimensional arrays?

c++ - 包含 stdafx.h 的最佳方法,当它位于第一个目录时?

c# - Mono:是否可以在没有 root 的情况下在端口 80 上运行服务?

c++ - Visual-Studio 教程,介绍如何将所有代码放在一个目录中,并将所有 sln 和 proj 内容放在另一个目录中?

c# - 将初始化数组设置为 C# 中的参数

c# - 写入二进制文件