2012-01-17 10 views
8

Mam plik awarii, w którym widzę, że jeden z moich własnych kontrolek VB6 jest odpowiedzialny za awarię; tj. jedna z jej metod jest częścią śledzenia stosu i widzę linię odpowiedzialną.Jak wyświetlić zmienne poziomu kontrolnego VB6 w WinDbg?

Stamtąd chciałbym sprawdzić stan jego zmiennych członkowskich. Jak mam to zrobic?

Uwaga: Posiadam również prywatne symbole dla moich kontrolek. Problemem jest możliwość sprawdzenia "Ja". Polecenie ! Obiekt address_of_Me nie wydaje się działać, więc jestem w błędzie.

Dziękuję.

+0

+1 Chciałbym również bardzo chciałbym wiedzieć, jak to zrobić – MarkJ

Odpowiedz

0

cóż, codeSMART ma jedną opcję zainstalowania globalnego uchwytu w aplikacji Pierwsze wywołanie SetUnhandledExceptionFilter (win api) powinno zostać zainstalowane podczas ładowania głównego lub głównego formularza modułu podczas zamykania programu, więc wywołaj SetUnhandledExceptionFilter.

Kod jest trochę długo, więc skopiować metody nazwy y wywołań 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 

Również tutaj jest Record deklaracje Struktura y API dla modułu

- 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 

Take zmieniony że How to route the exe exception back to VB6 app?

1

Minęło 10 lat, odkąd musiałem to zrobić w VB6, ale pamiętam wiele wypowiedzi Printer.Print w moim poprzednim życiu :)

kiedyś robić takie rzeczy do debugowania (ale nie dla kodu release)

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