如何从c#项目调试c ++ dll?

时间:2012-12-28 12:27:41

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

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

我选择以下选项:

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

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

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

现在请帮帮我怎样调试我的dll。我已经关注了很多博客,但所有博客都关注Attaching process方法,这种方法在我的情况下无效。我该怎么办?

2 个答案:

答案 0 :(得分:9)

您需要启用非托管调试,默认情况下,在任一方案中都不会启用它,因为您的主程序是受管理的。

您可以使用Project>在C#项目中执行此操作属性>调试选项卡>勾选“启用非托管代码调试”复选框。

您可以使用工具>单击“选择”按钮附加到“处理”。选择“调试这些代码类型”单选按钮并勾选Managed和Native。如果您的进程是64位,则可能不得不求助于本机。

在DLL的源代码中设置断点,并确保编写执行DLL函数的C#代码。如果仍然无法获得断点,请使用Debug> Windows>模块并验证您是否在模块列表中看到DLL。通过右键单击获取其他疑难解答信息,选择符号加载信息。其中显示了调试器查找PDB文件的位置。

答案 1 :(得分:0)

您可以将C ++项目添加到您的C#解决方案并直接向项目添加引用(而不是dll),然后您将不需要复制DLL。之后,只需启动C#项目的正常调试(F5),断点也将适用于C ++项目。这种方式非常适合调试。我已经尝试过这样的调试,并没有改变任何其他设置。