1

Whelp,我尽可能地避免它,但终于到了对一些古老的 VB6 代码进行一些更改的时候了。我是一名刚毕业的大学毕业生,所以我希望远离这段几乎和我一样古老的代码。

DLL 在 VB6 的本地安装中编译并通过组件服务进行部署。然后,该组件由 VBScript 在 Windows 2003 Server 上运行的 Classic ASP 应用程序中调用。

我已经尝试了使用 VB6 调试器调试此代码的所有方法,但我无法让它工作。我已将 DLL 编译到组件服务将其部署到的相同位置(非系统驱动器上的随机文件夹),并将二进制兼容性设置为同一个 DLL。每个类文件都将实例设置为 MultiUse,并将 MTSTransactionMode 设置为“1 - NoTransactions”。该组件工作正常,直到我附加调试器,然后在尝试实例化对象时得到“ActiveX 组件无法创建对象”。如果我分离调试器,它会再次工作。

我注意到,当我附加调试器时,在组件服务中,DLL 位置更改为 C:\Program Files\Microsoft Visual Studio\VB98\VB6DEBUG.DLL,我认为这只是 VB6 拦截对组件的调用。当我分离调试器时,它会变回来。我还应该注意,该组件被配置为使用与我登录的用户帐户不同的特定用户身份,但是每个人都被授予通过用户角色访问该组件的权限。组件激活类型也是“服务器应用程序”,但将其设置为“库激活”似乎没有什么区别。

我也尝试过使用 VC++6 IDE 和 VS2010,但没有运气。我能够在 VS2010 中调试 dllhost.exe 并且能够命中一些断点,但是符号没有正确加载。我尝试使用调试符号编译 DLL 并通过调试设置菜单将它们加载到 VS2010 环境中,但这并没有解决问题。

我也没有发现组件服务 JIT Debugger 很有用。我更希望能够在 VB6 中进行调试。

最让我惊讶的是,这段代码有数千行,并且在没有使用任何调试器的情况下得到了维护。我年轻的、被宠坏的自己还没有准备好接受这段代码不能被调试。

4

0 回答 0