5

我创建了一个visual c++ 6.0 dll项目并从我的c#代码中使用它。现在我想调试dll但我做不到。

我选择以下选项来执行此操作:

  • 将断点放在我的visual c++项目代码中。
  • 构建dll并将其复制到我的c#项目目录中。
  • 现在我构建了我的c#项目并且 dll 工作正常(方法调用完美)。
  • 现在我想调试dll.
  • 我关注一个博客并打开c++项目并选择Attach to process来自vc++.
  • 但我无法找到visual c#项目的运行过程,而它在任务管理器进程中可用。

在我的c#项目解决方案中,我有两个项目,即

  • Web 服务(我在访问 url 时调用了 dll 方法)
  • 另一个是webform application启动网络服务。

现在请帮助我应该如何调试我的 dll。我关注了很多博客,但他们都专注于Attaching process在我的情况下不起作用的方法。我应该怎么办?

4

2 回答 2

9

您需要启用非托管调试,因为您的主程序是托管的,所以在任何一种情况下都不会默认启用它。

您可以在 C# 项目中使用 Project > Properties > Debug 选项卡 > 勾选“启用非托管代码调试”复选框。

您可以通过单击“选择”按钮使用“工具”>“附加到进程”来完成此操作。选择“调试这些代码类型”单选按钮并勾选托管和本机。如果您的进程是 64 位,您可能只需要使用本机。

在 DLL 的源代码中设置断点,并确保编写执行 DLL 功能的 C# 代码。如果您仍然无法获得断点,请使用 Debug > Windows > Modules 并验证您是否在模块列表中看到了 DLL。通过右键单击获取其他故障排除信息,选择符号加载信息。这显示了调试器在何处查找 PDB 文件的跟踪。

于 2012-12-28T12:44:10.447 回答
0

您可以将 C++ 项目添加到您的 C# 解决方案并直接添加对项目的引用(而不是 dll),那么您将不需要复制 DLL。之后,只需开始 C# 项目的正常调试 (F5),断点也将适用于 C++ 项目。这种方式对于调试来说会很舒服。我已经尝试过这样的调试并且没有更改任何其他设置。

于 2012-12-28T12:58:08.347 回答