Как просмотреть переменные уровня управления VB6 в WinDbg? - PullRequest
8 голосов
/ 17 января 2012

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

Здесь я хотел бы проверить состояние переменных-членов. Как мне это сделать?

Примечание: у меня также есть личные символы для моих элементов управления. Проблема заключается в возможности осмотреть «Я». Команда ! Object address_of_Me , похоже, не работает, и я в растерянности.

Спасибо.

Ответы [ 2 ]

1 голос
/ 25 февраля 2012

Прошло 10 лет с тех пор, как мне пришлось делать это в VB6, но я помню много утверждений Printer.Print в моей прошлой жизни:)

Я делал подобные вещи для отладки (но не для кода выпуска)

Sub MySub
    On Error Goto ErrorTrap
    Dim intX as integer
    Dim intY as integer

    ' do some horrible error here

Exit Sub

ErrorTrap:
    Printer.Print "Error"
    Printer.Print intX
    Printer.Print intY
    Printer.Print ...

End Sub
0 голосов
/ 18 января 2012

ну, у codeSMART есть одна опция - установить глобальный дескриптор в вашем приложении. Первый вызов SetUnhandledExceptionFilter (win api) должен быть установлен при загрузке главной или основной формы модуля при закрытии программы, поэтому вызовите SetUnhandledExceptionFilter.

Код немного длинный, поэтому копируйте имена методов и вызовы API

Public Sub InstallGlobalHandler()
On Error Resume Next

If Not lnFilterInstalled Then
    Call SetUnhandledExceptionFilter(AddressOf GlobalExceptionHandler)
    lnFilterInstalled = True
End If
End Sub

Public Sub UninstallGlobalExceptionHandler()
On Error Resume Next

If lnFilterInstalled Then
    Call SetUnhandledExceptionFilter(0&)
    lnFilterInstalled = False
End If
End Sub

Также здесь есть Структура записи и объявления API для модуля

- CopyMemory 
- SetUnhandledExceptionFilter
- RaiseException
' Public enums
-EExceptionType
-EExceptionHandlerReturn    
-Private Const EXCEPTION_MAXIMUM_PARAMETERS = 15
' Private record structure
-Private Type CONTEXT      
'Structure that describes an exception.
-Private Type EXCEPTION_RECORD
'Structure that contains exception information that can be used by a debugger.
-Private Type EXCEPTION_DEBUG_INFO
-Private Type EXCEPTION_POINTERS

Возьмите исправленный Какперенаправить исключение exe обратно в приложение VB6?

...