Debuggen eines Laufzeitprozesses
Die Debug-API der Common Language Runtime (CLR) unterstützt das Debuggen in der Laufzeitumgebung. Im Folgenden werden die Schritte beschrieben, die zum Debuggen eines Laufzeitprozesses ausgeführt werden müssen:
Der Debugger erstellt eine Instanz der ICorDebug-Schnittstelle. Der Debugger ruft CComPtrBase::CoCreateInstance auf, indem er mit der CLSID_CorDebug-CLSID eine Instanz von ICorDebug abruft.
Der Debugger initialisiert die Debug-API, indem er die ICorDebug::Initialize-Methode aufruft.
Der Debugger registriert einen verwalteten Ereignishandler. Der Debugger ruft die ICorDebug::SetManagedHandler-Methode auf, um eine Instanz der ICorDebugManagedCallback-Schnittstelle als Rückruf für den Empfang von Benachrichtigungen und Informationen über Ereignisse in verwaltetem Code zu registrieren.
Der Debugger registriert optional einen nicht verwalteten Ereignishandler. Zum Debuggen von nicht verwaltetem Code ruft der Debugger die ICorDebug::SetUnmanagedHandler-Methode auf, um eine Instanz von ICorDebugUnmanagedCallback als Rückruf für den Empfang von Benachrichtigungen und Informationen über Ereignisse in nicht verwaltetem Code zu registrieren.
Der Debugger erstellt den zu debuggenden Prozess. Der Debugger ruft die ICorDebug::CreateProcess-Methode auf, um einen Prozess zu erstellen.
Die Debug-API benachrichtigt den Debugger über den neuen zu debuggenden Prozess. Die Debug-API ruft ICorDebugManagedCallback-Methoden auf, beginnend mit ICorDebugManagedCallback::CreateProcess. Daraufhin können Aufrufe von ICorDebugManagedCallback::LoadModule, ICorDebugManagedCallback::LoadClass, ICorDebugManagedCallback::CreateThread usw. folgen.
Der Debugger beendet den Debugvorgang. Daraufhin erhält der Debugger ein ICorDebugManagedCallback::ExitProcess-Ereignis, das angibt, dass der zu debuggende Prozess nicht mehr ausgeführt wird. Eine Weile später gibt der Debugger alle Verweise auf Schnittstellen frei und ruft die ICorDebug::Terminate-Methode auf.
Siehe auch
Konzepte
Übersicht über das Debugging in der CLR