Трассировка стека в VB6

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


person Kannan Karmegam    schedule 30.07.2010    source источник
comment
Это точная копия вопроса Можно ли получить стек вызовов программно в VB6 stackoverflow.com/questions/127645/. Я голосую за закрытие   -  person MarkJ    schedule 30.07.2010
comment
Возможный дубликат Можно ли получить вызов программно стек в VB6?   -  person StayOnTarget    schedule 29.01.2018


Ответы (5)


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


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

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

person MarkJ    schedule 30.07.2010

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

person Shachar Weis    schedule 30.07.2010
comment
На самом деле вы связались со страницей, где упоминается метод черного пояса для его автоматической генерации, а затем ссылаетесь на заархивированную статью журнала Visual Studio, которой больше нет в Интернете :( - person MarkJ; 30.07.2010
comment
Ссылка сейчас мертва - person apc; 29.06.2017

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

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

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

Он чрезвычайно выигрывает от некоторой автоматизации в вашей среде IDE для вставки обработчиков ошибок и номеров строк.

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

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

person Adrian    schedule 10.08.2012

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

person derekerdmann    schedule 30.07.2010