从Visual Studio 2012中调试VB6代码

13
我们有一个使用VB6编写的大量遗留组件的.NET应用程序。我们能够使用Visual Studio 2010中的本机代码调试器和生成的pdb文件调试VB6代码。升级到包括Update 2的VS 2012后,我们无法执行此操作。
模块窗口显示以下消息:
“二进制文件未使用调试信息构建。”
您还可以在输出窗口中找到以下消息:
“模块是没有符号建立的。”
当我尝试手动加载符号时,我得到以下消息:
“在此文件夹中未找到匹配的符号文件。”
从VS 2010调试相同的dll或exe可以正常工作。
是否有选项启用它?

你是用 VC++ 调试器来完成这个任务的吗? - Ilya Kurnosov
1
无法回答您的问题,但很想了解更多关于使用VS2010调试VB6互操作性的内容!听起来对于旧的混合语言应用程序来说是一个时间节省器。 - tcarvin
这篇文章中查找有关在VS 2010中调试VB6的详细信息。 - Pecan
1
我目前正在尝试找到一种解决方法,以便在Server 2012上调试VB6。下面的修复程序没有帮助我。我目前已经记录了一个Micorosft Connect呼叫 http://connect.microsoft.com/VisualStudio/feedback/details/800624/remote-debugging-vb6-with-visual-studio-2012 和付费支持。我已经将问题缩小到Server 2012无法看到使用符号构建的dll的问题。还有其他人仍然在为此而苦苦挣扎吗? - ScottGuymer
4个回答

10
我发现了一种在我的电脑上有效的解决方案(根据Microsoft在ScottG的付费支持请求上的评论 - 谢谢,Scott)。 显然,2010年之后的Visual Studio默认调试器无法处理VB6 DLL,但有一个复选框可以使用旧的调试引擎来处理:

enter image description here

我不需要启用本地编辑和继续。


是的,我可以确认这对我在VS2015和我们的VB6 COM DLL中是解决方案。 - scipilot
Visual Studio 2015可能是终点。我没有找到一种方法可以使用Visual Studio 2017调试VB6代码。 - Phil Jollans
在使用Visual Studio 2015时,启用了“启用编辑并继续”和“启用本机编辑并继续”。但未拉入VB6符号。选择“使用托管兼容模式”,Visual Studio开始使用VB6符号。从未考虑过尝试选择此选项。谢谢! - Kevin Marshall

9

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


1
这对于一个旧的VC6 C++项目也适用。谢谢! - Ed Bayiates
感谢提到VC++ 6,@EdBayiates。在日复一日的折磨中,终于找到了一个有效且可行的答案,不得不拉高兴奋的头发并咬紧牙关才能完成汇编和地址映射! - Hugo

2
在VS 2015中,选择“工具->选项->调试->常规”,勾选“使用本机兼容模式”。虽然我仍需要调试VB6,但我很感激我仍能够这样做。

只是想提醒一下,当我设置了“使用本机兼容模式”时,我确实遇到了无法触发断点的问题。取消选中“使用本机兼容模式”可以解决这些问题。因此,该设置并非没有问题。 - Kevin Marshall

1

看起来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。 - Pecan
如果VB仍然受支持,那么我建议您向微软报告错误。 - xwlan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接