如何在VB6 ActiveX EXE 托管的VS2010 中调试C++ OCX 控件

How to debug C++ OCX control in VS2010 hosted by VB6 ActiveX EXE

我有一个用 C++ 编写并使用 VS2010 构建的 OCX 控件。控件的主机应用程序是 VB6 ActiveX EXE。我想弄清楚如何在 VS2010 中调试 OCX 控件。通常要调试 OCX 控件,您将其放入将控件嵌入到 OCX 控件的 Properties:Debugging:Command 字段中的主机应用程序中。当我进入 VB6 主机程序的 EXE 并尝试开始调试时,它会给我以下警告框

我怀疑VB6调试信息与VS2010不兼容。在这种情况下,我实际上不需要调试 VB6 ActiveX EXE。 (我可以从 VB6 开发环境中做到这一点)。但我已经尝试在上面的对话框和调试器外部单击 OCX 控件 运行s,因为它忽略了我设置的任何断点。如何在调试器下获取OCX控件到运行?

我看过这个类似的 question 但它似乎略有不同,因为听起来这个案例的所有 OCX 控件都在 VB6 中。它谈到为 OCX 控件设置“二进制兼容性”,但我认为这仅适用于 VB6 环境而不适用于 VS2010 下的 C++。

还有没有办法生成与 VS2010 调试环境兼容的 VB6 ActiveX EXE 的调试信息?

我已经能够调试 OCX 控件,但我找到的唯一方法是使用我在之前评论的链接 (TSTCON Still Available and TSTCON Info) 中提供的 TSTCON 示例程序。我使用 OCX 控件将 TSTCON 和 TCProps 作为项目添加到 VS2010 解决方案,然后指定 TSTCON.exe 作为调试命令行。这样做我可以在 OCX 控件中断点。在 OCX 控件上启动调试将启动 TstCon。然后,当 TstCon 应用程序启动时,右键单击内容区域和 select "Insert New Control" 和 select 所有已注册 OCX 控件列表中的 OCX 控件。请务必 select Linker:Register Output:Yes 用于 OCX Control 项目。控件将初始化,然后可以调用任何方法并通过 TstCon 应用程序菜单指定参数 Control:Invoke Methods...

经过更多探索后,我发现可以按照我最初在 post 中提出的要求进行操作。
虽然 VS2010 调试器在通过 VB6 ActiveX EXE 容器启动时不会自动附加到 OCX 控件,但可以手动附加到 OCX 控件。实际上可以运行VB6调试器中的容器ActiveX EXE同时运行VS2010调试器中的OCX控件。这是顺序

启动带有ActiveX EXE 项目的VB6 开发环境。在调试模式下开始执行 ActiveX EXE。现在启动 VS2010 开发环境和 select 菜单项 Debug:Attach to Process... 然后 select VB6 进程作为要附加的进程。现在,VB6 应用程序中的断点将路由到 VB6 调试器,OCX 控件中的断点将路由到 VS2010 调试器。

如果您不需要调试 VB6 ActiveX EXE,您可以将其指定为 VS2010 OCX 控件的启动命令,然后在它启动后执行 Attach to Process,尽管使用 VB6 开发环境可确保您可以捕获启动时OCX控件中的断点。