需要帮助调试在.NET应用程序中使用的VB6代码。

3

我的 .Net 应用程序使用了一些 VB6 控件和库。我无法通过我的 .Net 应用程序调试 VB6 代码。有人可以帮帮我吗,我该如何调试在 .Net 应用程序中使用了一个 VB6 用户控件的 VB6 代码。


1
我不能更改这个架构,因为我们不维护vb6代码。代码是由其他人维护的。 - user2606468
2
如果您提供具体的问题,您可能会得到更多的帮助。 - Deanna
1
如果它是由“其他人”维护的,那么您就没有任何代码可查看。显然,您需要来自那些其他人的帮助,而不是我们的帮助。 - Hans Passant
1
请参阅https://dev59.com/OFjUa4cB1Zd3GeqPQEw9 - MarkJ
可能是以下问题的重复:通过.NET类包装VB6 COM对象进行步进 - StayOnTarget
4个回答

2
我已经做过这个很多次了,以下是一篇关于如何在MSDN上进行的详细步骤文章。基本上,您只需要从VB6中按F5,并在您正在调查的VB6代码中设置断点。

在.NET中的下一步是确保您添加了对刚刚构建的确切VB6 DLL的引用,并运行.NET应用程序,它应该会触发您的VB6断点(记住VB6应用程序仍在运行,您把它留在了F5)。


2

尝试这个建议,来源于这里

1. 使用符号构建您的VB6项目。

在VB6中打开vbp文件并转到“项目->属性”。 选择“编译”选项卡,并选中“编译为本地代码”。 然后选择“无优化”单选按钮并选中“创建符号调试信息”。

这将生成一个.PDB(程序数据库)文件和您的.EXE。 此文件包含调试信息,以便VS.NET调试器可以对齐源和断点等。(请确保您的VB6 dll集上具有二进制兼容性,否则您必须在VS.NET中删除并重新添加对VB6组件的引用。)

2. 在VS.NET中打开您的.NET项目。

转到项目属性并选择“配置属性->调试”属性页面,启用非托管调试。

对于VB.NET项目,此选项为“非托管代码调试”,对于C#是“启用非托管调试”。

3. 选择属性。

在“调试源文件”中添加一个条目,指向VB6组件源代码所在的路径。

在“调试符号文件”中添加一个条目,指向步骤1中生成的.PDB文件所在的文件夹。

现在,您应该能够在VS.NET中打开您的.bas、.cls、.frm等文件,并在文件中设置断点。 一旦调试,调试器将停止在这些代码行上。

免责声明:我自己没有尝试过这个方法。


这可能有效,但是根据我的经验,与仅在IDE中运行VB6代码相比,它需要更多的设置和使用。 - StayOnTarget

0

我不确定你是否能够做到,但是我已经从以下link获得了一些想法:

如果您在“解决方案资源管理器”中双击“我的项目”,并转到“调试”选项卡,您将看到一个名为“启动外部程序”的选项。选择此选项,并键入“C:\ Program Files \ Microsoft Visual Studio \ vb6.exe”(带引号)。 之后,在命令行参数中放置您的.vbp文件的完整路径(同样要加上引号)。现在,当您运行VS时,将会启动VB6,并附加调试器。然后,您可以按照您习惯的常规方式设置和命中断点。 或者,您也可以使用“工具”->“附加到进程”来完成此操作,但我个人发现第一种方法更容易。您只需设置一次,然后就不必再担心它了。 需要注意的一件事是,如果您在VS2005中点击停止,则您的VB6程序将退出而不提示您保存,因此,如果您在VB6项目中进行任何更改,请确保在按F5之前单击保存。 希望这有所帮助,请让我们知道您是否遇到任何问题。

我同意,假设你在.NET和VB6两个方面都有完整的源代码,这是最简单的方法。 - StayOnTarget

-1

你无法在Visual Studio中以任何比编译后的汇编代码更高的级别来调试VB6代码。如果你有源代码,就可以将其转换。


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