【问题标题】:Debugging A VC++ 6 DLL Called From C#调试从 C# 调用的 VC++ 6 DLL
【发布时间】:2011-09-19 12:11:21
【问题描述】:

我有一个用 Visual Studio 6 编写的旧 DLL,我从用 Visual Studio 2010 编写的 C# 调用它。该 DLL 无法正常工作,我想对其进行调试。我怎样才能做到这一点?我有源代码项目,但看不到如何进入它。

注意:当我说“不起作用”时,对 DLL 的调用会成功,并且在失败之前会通过 DLL 中的代码进行一些处理,但我想准确追踪到哪里。

【问题讨论】:

  • 你已经尝试了什么?例如,您是否尝试过附加 VS6 进行调试?
  • 我已尝试将 VC6 调试器附加到 C# 应用程序,但该进程未显示在 Build->debug->attach to process

标签: c# dll interop pinvoke


【解决方案1】:

MSDN 上的here 描述了调试 DLL 的技术。您需要从 Visual Studio 6(即开发 DLL 的工具)中执行此操作,因此术语将发生变化。但原则保持不变。

【讨论】:

    【解决方案2】:

    只要您拥有带有相应二进制文件和源代码的 PDB 文件,在 .NET 进程上附加 VS6 调试器即可。但是,您只能在 DLL 代码上中断。

    如果选中“允许非托管调试”标志,则附加另一个 VS+ 应该可以工作,但调试器可能不会加载符号。重新编译DLL即可解决最后一个问题。

    【讨论】:

    • 我已尝试将 vc6 调试器附加到 .NET 进程,但 .NET 进程(WinForms 应用程序)未显示在列表中。
    • 尝试将.NET项目平台改为x86,重新编译,重做动作。
    【解决方案3】:

    打开 Visual C++ Dll 项目,在需要的地方设置断点。在项目属性、调试、调试会话的可执行文件中,键入使用此 Dll 的 .NET 可执行文件。开始调试 (Go)。调用 VC++ 函数时,调试器中断。使用这种方式,您只能调试非托管的 VC++ 代码。

    另一种方法是在混合调试模式下从 .NET 客户端开始调试。将 VC++ 项目添加到解决方案并重新构建它以调试托管和非托管代码。

    【讨论】:

      猜你喜欢
      • 2018-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-20
      • 1970-01-01
      相关资源
      最近更新 更多