从Visual Studio 2012调试VB6代码

从Visual Studio 2012调试VB6代码

问题描述:

我们有一个.NET应用程序,它使用很多以VB6编写的遗留组件。我们能够使用本地代码调试器调试VB6代码,并在Visual Studio 2010中生成pdb文件。升级到VS 2012(包括更新2)后,我们无法做到这一点。从Visual Studio 2012调试VB6代码

以下消息的模块窗口显示:

二进制不与调试信息。

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

模块不带符号的铺设。

当我尝试手动加载符号,我得到以下信息:

的匹配符号文件这个文件夹中没有被发现。

从VS 2010调试非常相同的DLL或EXE工作正常。

有没有选择启用它?

+0

你使用VC++调试器来完成任务还是什么? – 2013-05-07 19:46:23

+1

无法回答你的问题,但很想知道更多关于使用VS2010调试VB6的问题!听起来像是旧式混合语言应用程序的节省时间。 – tcarvin 2013-05-08 13:09:34

+0

在[本文]中查找有关在VS 2010中调试VB6的详细信息(http://blogs.msdn.com/b/robgruen/archive/2004/11/09/254602.aspx) – Pecan 2013-05-09 10:13:53

我终于找到了如何使用Visual Studio 2012调试VB6组件。总之,您必须先启用旧的pdb格式,方法是设置“选项”|“调试|编辑并继续|启用本机编辑并继续,然后您可以像往常一样附加到dllhost.exe。

+1

这也适用于旧的VC6 C++项目。谢谢! – 2013-12-23 23:56:19

+0

感谢提及VC++ 6,@EdBayiates。最后得到一个有效的,工作的答案后的头发拉动和gnashing在汇编和映射地址! – Hugo 2017-08-11 18:37:52

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

+0

我已经构建了示例并试图解析pdb文件,并且所有内容都正常工作。我还检查了它使用的是C:\ Program Files(x86)\ Microsoft Visual Studio 11.0 \ Common7 \ Packages \ Debugger \ msdia110.dll。 – Pecan 2013-05-10 08:31:55

+0

好,那么如果VB仍然支持,我建议你向微软报告一个bug。 – xwlan 2013-05-10 16:05:43

我发现了一个适用于我的机器的解决方案(根据微软对ScottG的paid support request的评论 - 谢谢Scott)。显然,2010年以后Visual Studio的默认调试器不处理VB6的DLL,但有一个复选框,使用旧的调试引擎,它的作用:

enter image description here

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

+4

也适用于Visual Studio 2015 – 2016-04-18 15:34:03

+0

是的,我可以证实这是我在VS2015和VB6 COM DLL中的解决方案。 – scipilot 2017-02-27 04:50:41

+0

Visual Studio 2015可能是该行的结尾。我还没有找到使用Visual Studio 2017调试VB6代码的方法。 – 2017-07-20 13:37:30

在VS 2015工具 - >选项 - >调试 - >常规中,选择'使用本地兼容模式'。它很糟糕,我仍然需要调试VB6,但我很感激,我仍然能够。

+0

需要注意的是,当我使用“使用本机兼容模式”时,确实遇到了我的断点问题。取消选中“使用本机兼容模式”更正了这些问题。所以这个设置并非没有问题。 – 2017-04-26 23:09:15