2010-07-30 707 views
3

是否可以在Visual Basic 6.0中获取堆栈跟踪信息?我的意思是我想找出导致类似于.NET堆栈跟踪的错误的函数名称和确切的行。我创建了一个在我的测试环境中工作正常的ActiveX DLL,但它在生产环境中引发错误(错误:91-对象变量或未设置块变量)。任何帮助,非常感谢。VB6中的堆栈跟踪

+2

这是”是否可以在VB6中以编程方式检索调用堆栈“的精确副本http:// stackoverflow.com/questions/127645/is-it-possible-to-retrieve-the-call-stack-programmatically-in-vb6。我投票关闭 – MarkJ 2010-07-30 07:54:34

+0

可能重复的[是否有可能以编程方式检索调用堆栈VB6?](https://stackoverflow.com/questions/127645/is-it-possible-to-retrieve-the-call-stack-programmatically-in-vb6) – DaveInCaz 2018-01-29 16:53:56

回答

0

你可能无法在VB6中获得。 previous question
Err object获取更多信息。

+0

我用MZTools在代码中插入行号,然后使用Erl函数获取导致错误的行号 – Kannabiran 2010-08-18 05:50:46

1

VB6似乎并不有一个体面的方式来做到这一点本身。

这有点麻烦,但是您可以将自定义解决方案组合在一起,以便在需要时将文本文件添加到文本文件中。手动

Public Sub LogCall(message as String) 
    Open "c:\My Documents\sample.txt" For Output As #1 
    Print #1, message 
    Close #1 
End Sub 

,然后从自己的函数

LogCall "MyFunction: Line 42" 

它并没有解决问题调用它,但它可能会帮助你缩小范围:把一个方法的地方,看起来是这样的。

关于你的具体错误,我会通过并检查你将一个对象分配给一个变量的情况 - 我发现很容易忘记Set关键字,并且当我至少期望它时得到完全相同的错误。

4

This是一个很好的方法来做到这一点 - 对现有的重复问题的答案。使用MZTools插入错误处理程序自动


或者,您可以调试使用WinDBG,从微软免费的独立调试器的生产环境中的内置的DLL。使用符号将您的DLL编译为本地代码(创建PDB文件)。

这是微软一位关于使用Windbg与VB6和2004 blog post由另一个微软家伙简要介绍Windbg的2006 blog post

1

我这样做的首选方法是HuntERR;它处于许可许可下,因此可以在任何项目中使用而不受惩罚。

http://www.devx.com/vb2themax/Tip/19792

这是VB6,你关心包括允许在尽可能多的信息完整的堆栈跟踪一个优秀的静态库。

从IDE中的某些自动化插入错误处理程序和行号可以获得巨大的好处。

作为链接的存档有一些额外的,我不熟悉的,包括什么似乎是一个VB6的IDE插件 - 我将被添加到我的VB6套件收藏。

这个图书馆可以从字面上把你从“HUH?“具有全行编号的堆栈跟踪,它使VB6在正确使用时具有专业级别的错误处理能力。