Возможно ли получить информацию о трассировке стека в Visual Basic 6.0? Я имею в виду, что хочу узнать имя функции и точную строку, которая вызывает ошибку, аналогичную трассировке стека .NET. Я создал ActiveX DLL, которая отлично работает в моей тестовой среде, но выдает ошибку в производственной среде (ошибка: 91-объектная переменная или с не заданной блочной переменной). Любая помощь по этому поводу очень ценится.
Трассировка стека в VB6
Ответы (5)
Это хороший способ сделать это - ответ на существующий повторяющийся вопрос. Используйте MZTools для автоматической вставки обработчиков ошибок
Кроме того, вы можете отлаживать созданную DLL в производственной среде с помощью WinDBG. , бесплатный автономный отладчик от Microsoft. Скомпилируйте вашу DLL в собственный код с символами (создайте файлы PDB).
Вот сообщение в блоге 2006 г., написанное специалистом из Microsoft о использование Windbg с VB6 и сообщение в блоге 2004 г. другим парнем из Microsoft с кратким введением в Windbg.
Единственный вариант - сделать это вручную с обработкой ошибок VB6.
Вот пример:
http://www.vbaccelerator.com/home/vb/code/Techniques/RunTime_Debug_Tracing/article.asp
Я предпочитаю это делать с помощью HuntERR; он находится под разрешающей лицензией, поэтому может использоваться безнаказанно в любом проекте.
http://www.devx.com/vb2themax/Tip/19792
Это отличная статическая библиотека для VB6, которая позволяет выполнять трассировку полного стека с таким объемом информации, который вы хотите включить.
Он чрезвычайно выигрывает от некоторой автоматизации в вашей среде IDE для вставки обработчиков ошибок и номеров строк.
В связанном архиве есть ряд дополнительных функций, с которыми я не знаком, в том числе то, что кажется надстройкой VB6 IDE - я добавлю это в свою коллекцию набора VB6.
Эта библиотека может буквально избавить вас от того, чтобы сказать "А?" наличие трассировки стека с полной нумерацией строк дает VB6 профессиональный уровень обработки ошибок при правильном использовании.
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
и получить ту же ошибку, когда я меньше всего этого ожидаю.
Возможно, вы не сможете получить это в VB6. предыдущий вопрос.
Получите как можно больше информации из объекта Err < / а>.