Трассировка стека в VB6 - PullRequest
4 голосов
/ 30 июля 2010

Возможно ли получить информацию трассировки стека в Visual Basic 6.0.Я имею в виду, я хочу узнать имя функции и точную строку, которая вызывает ошибку, похожую на трассировку стека .NET.Я создал ActiveX DLL, которая прекрасно работает в моей тестовой среде, но выдает ошибку в производственной среде (ошибка: 91-переменная объекта или переменная блока не установлена).Любая помощь по этому вопросу высоко ценится.

Ответы [ 5 ]

4 голосов
/ 30 июля 2010

Это хороший способ сделать это - ответ на существующий дублирующий вопрос.Используйте MZTools для автоматической вставки обработчиков ошибок


Кроме того, вы можете отлаживать встроенную DLL в производственной среде, используя WinDBG , бесплатный автономный отладчик от Microsoft.Скомпилируйте вашу DLL в нативный код с символами (создайте файлы PDB).

Вот сообщение 2006 в блоге от парня из Microsoft об использовании Windbg с VB6 и сообщение в блоге от другого парня из Microsoft с кратким введением в Windbg.

1 голос
/ 11 августа 2012

Мой предпочтительный метод для этого - HuntERR;на него распространяется разрешительная лицензия, поэтому его можно безнаказанно использовать в любом проекте.

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

Это превосходная статическая библиотека для VB6, которая позволяет выполнять полные трассировки стека с таким количеством информации, какое вам нужновключить.

Это очень полезно, если в вашей среде IDE есть некоторая автоматизация для вставки обработчиков ошибок и номеров строк.

В архиве в виде ссылки есть ряд дополнительных функций, с которыми я не знаком,включая то, что кажется надстройкой VB6 IDE - я добавлю это в свою коллекцию VB6 kit.

Эта библиотека может буквально отвести вас от "HUH?"наличие трассировки стека с полной нумерацией строк дает VB6 профессиональный уровень обработки ошибок при правильном использовании.

1 голос
/ 30 июля 2010

Единственный вариант - сделать это вручную, с обработкой ошибок VB6.
Вот пример:
http://www.vbaccelerator.com/home/vb/code/Techniques/RunTime_Debug_Tracing/article.asp

1 голос
/ 30 июля 2010

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 и получитьточно такая же ошибка, когда я меньше всего этого ожидаю.

0 голосов
/ 30 июля 2010

Возможно, вы не сможете достичь этого в VB6. предыдущий вопрос .
Получите как можно больше информации от объекта Err .

...