从 Visual Studio 2012 调试 VB6 代码

Posted

技术标签:

【中文标题】从 Visual Studio 2012 调试 VB6 代码【英文标题】:Debugging VB6 Code From Visual Studio 2012 【发布时间】:2013-05-01 08:21:33 【问题描述】:

我们有一个 .NET 应用程序,它使用了许多用 VB6 编写的遗留组件。我们能够使用本机代码调试器调试 VB6 代码并在 Visual Studio 2010 中生成 pdb 文件。升级到 VS 2012(包括更新 2)后,我们无法执行此操作。

模块窗口显示以下消息:

二进制文件不是使用调试信息构建的。

您还可以在输出窗口中找到以下消息:

模块是在没有符号的情况下构建的。

当我尝试手动加载符号时,我收到以下消息:

在此文件夹中找不到匹配的符号文件。

从 VS 2010 调试相同的 dll 或 exe 工作正常。

有什么选项可以开启吗?

【问题讨论】:

您是使用 VC++ 调试器完成任务还是什么? 无法回答您的问题,但希望了解更多有关使用 VS2010 调试互操作 VB6 的信息!对于较旧的混合语言应用来说,这听起来可以节省时间。 在this article中查找有关在 VS 2010 中调试 VB6 的详细信息 我目前正试图找到一种解决方法来调试 Server 2012 上的 VB6。下面的修复对我没有帮助。我目前有一个 Micorosft Connect 通话记录 connect.microsoft.com/VisualStudio/feedback/details/800624/… 和付费支持。我已将问题缩小到 Server 2012 无法看到 dll 是用符号构建的问题。还有其他人还在为此苦苦挣扎吗? 【参考方案1】:

在 VS 2015 Tools->Options->Debugging->General 中,选择“Use Native Compatibility Mode”。很糟糕,我仍然需要调试 VB6,但我很庆幸我仍然能够。

【讨论】:

请注意,当我设置“使用本机兼容模式”时,我确实遇到了断点问题。取消选中“使用本机兼容模式”更正了问题。所以设置也不是没有问题。【参考方案2】:

我找到了一个适用于我的机器的解决方案(根据 ScottG 的 paid support request 上的 Microsoft cmets - 谢谢,Scott)。显然,2010 年后 Visual Studio 的默认调试器不处理 VB6 DLL,但有一个复选框可以使用旧的调试引擎,它可以:

我不需要启用本机编辑并继续。

【讨论】:

是的,我可以确认这是我在 VS2015 和我们的 VB6 COM DLL 中的解决方案。 Visual Studio 2015 可能会结束。我还没有找到使用 Visual Studio 2017 调试 VB6 代码的方法。 使用 Visual Studio 2015 启用编辑并继续已启用,启用本机编辑并继续已启用。没有拉入 VB6 符号。选择使用托管兼容模式和 Visual Studio 开始使用 VB6 符号。甚至从未考虑过尝试选择此选项。谢谢!【参考方案3】:

我终于找到了如何使用 Visual Studio 2012 启用调试 VB6 组件。简而言之,您必须首先通过设置 Options | 启用旧的 pdb 格式。调试 |编辑并继续 |启用本机编辑并继续,然后您可以像往常一样附加到 dllhost.exe。

【讨论】:

这也适用于旧的 VC6 C++ 项目。谢谢! 感谢您提及 VC++ 6,@EdBayiates。经过几天对装配和映射地址的拉扯和咬牙切齿,终于得到了一个有效的、有效的答案!【参考方案4】:

似乎VS 2012使用msdia110.dll来解码符号文件,VS文件夹中有一个DIA SDK示例,你可以测试它是否可以解析那些VB pdb文件。如果不能,我猜新版本的 DIA 不再支持旧版本的 pdb。

【讨论】:

我已经构建了示例并尝试解析 pdb 文件并且一切正常。我还检查了它是否使用 C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\Packages\Debugger\msdia110.dll。 好,如果仍然支持 VB,我建议你向 Microsoft 报告错误。

以上是关于从 Visual Studio 2012 调试 VB6 代码的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio 2012 远程调试:对内存位置的无效访问

visual studio 2012如何调试和运行程序?

Visual Studio 2012 没有调试选项

Visual Studio 2012 分析远程调试过程

我可以在 Visual Studio 2012 中编译和调试(运行)单个 C++ 文件吗? (如何避免创建太多项目)

Visual Studio 2012 中的远程调试