【问题标题】:Debug C# dll from C++ solution via COM通过 COM 从 C++ 解决方案调试 C# dll
【发布时间】:2012-12-08 03:07:16
【问题描述】:

我有一个 C++ 解决方案。启动项目是一个exe。在解决方案中,有一些为 COM 互操作注册的 C# dll(针对 .NET Framework 2.0)。当我在 C# 代码中放置断点时,我得到带有"No native symbols in symbol file" 的空心红色断点

我已尝试在调用 COM 方法的启动项目上将 Project Property Pages -> Debugging -> Debugger Type 设置为 Mixed。

我已经检查了Debug -> Windows -> Modules。它已经加载了我的dll,符号状态是"No native symbols in symbol file"

这不是世界末日,因为如果我先执行Debug -> Start Without Debugging,然后执行Debug -> Attach to Process,将Attach To: 更改为Managed (v2.0, v1.1, v1.0) code, Native code。然后我在 C++ 代码和 C# 代码中都打断点。

所以我有我的解决方法,但我认为我是否可以通过附加到进程来做到这一点 - 我应该能够通过调试来做到这一点。

我如何通过 Debug -> Start Debugging 来达到我的 C# 断点?

【问题讨论】:

  • 怀疑是否有可行的方法,我尝试了相同的方法,并花了几个小时尝试这样做,最后还是坚持使用工作正常的附加到进程。
  • 很公平,我对使用 attach 来处理它没有任何问题,这只是你不能离开它的事情之一,因为你认为“肯定有办法”
  • 我也有这个问题,我想根本问题是“混合”选择了 Native + Managed (v4.0),所以没有办法从启动设置。

标签: c# c++ visual-studio-2010 com .net-2.0


【解决方案1】:

通过执行以下操作,我能够从 VS2008 中的 C++ 项目中调试我的 C# dll:

在 C++ 项目的属性中,转到配置属性 -> 调试。将“调试器类型”设置为混合。 “附加”应设置为否。

在 C# 项目属性的“调试”选项卡中,将“启动外部程序”设置为 C++ 项目的可执行文件。

【讨论】:

  • 非常适合我!谢谢!
【解决方案2】:

我知道它有点老了,但我找到了一个实用的解决方案。

我在使用使用 C# COM-Object 的 C++ 应用程序时遇到了同样的问题。我在 C++ 和 C# 端尝试了 Visual Studio 中的几个设置。在我尝试手动启动调试器之前没有任何帮助。

你可以使用

Debugger.Launch();

在 C# DLL 上手动启动调试器。我知道这不是最好的,而是一种实用的方法。在以后的生产环境中,您必须删除调试器启动功能:)。

问候

【讨论】:

    【解决方案3】:

    我不确定这是否会有所帮助,但我们经常使用 C# 和 C++。我发现这可以通过将 C++ 项目和 C# 项目放在同一个解决方案中并在 C# 项目中启用“本机调试”来实现。然后我能够在调试时在它们之间来回跳转。

    【讨论】:

    • 我在同一个解决方案中有两个项目,在 VS2010 中,我在所有 C# 项目上设置了“启用非托管代码调试”。它仍然不起作用。我假设启动项目是一个 C++ exe,尽管我在 C++ 项目属性中将调试器类型设置为混合,但调试器仅设置为本机。
    猜你喜欢
    • 1970-01-01
    • 2015-02-22
    • 1970-01-01
    • 2018-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-01
    • 1970-01-01
    相关资源
    最近更新 更多