2012-01-17 16 views
8

Ho un file di crash in cui posso vedere che uno dei miei controlli utente VB6 è responsabile del crash; uno dei suoi metodi è parte della traccia dello stack e posso vedere la linea responsabile.Come visualizzare le variabili a livello di controllo VB6 in WinDbg?

Da qui, vorrei controllare lo stato delle sue variabili membro. Come faccio a fare questo?

Nota: ho anche i simboli privati ​​per i miei controlli. Il problema è riuscire a ispezionare "Me". Il comando ! Object address_of_Me non sembra fare il trucco e quindi sono in perdita.

Grazie.

+0

+1 Vorrei anche piacerebbe molto sapere come fare – MarkJ

risposta

0

beh, codeSMART ha un'opzione installa l'handle globale sull'applicazione prima di chiamare a SetUnhandledExceptionFilter (win api) deve essere installato quando si carica il modulo principale o master quando si chiude il programma, quindi chiamare SetUnhandledExceptionFilter.

il codice è po 'lungo in modo da copiare metodi nomi y chiamate 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 

Anche qui è dichiarazioni Struttura y API record per il modulo

- 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 

Prendere un rivisto che How to route the exe exception back to VB6 app?

1

Sono passati 10 anni da quando ho dovuto farlo in VB6, ma ricordo un sacco di dichiarazioni Printer.Print nella mia vita passata :)

ho usato per fare cose come questa per il debug (ma non per il codice di rilascio)

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