Silent Process Exit
Unter Windows 7/Windows Server 2008 R2 bemerken wir, dass es eine neue Einstellung under gflags gibt: Silent Process Exit.
Info - Wann hilft uns diese Einstellung?
Ein Prozess wird ohne Abfrage des Benutzers und ohne einen hilfreichen Bericht unerwartet beendet. Ein Debugging dieser Art von Problemen ist meistens schwer zu unternehmen. Windows 7 erleichtert aber das Troubleshooting der “silent“ Beendungen dieser Prozesse.
Ursachen
Beispiele von “silent process exits” sind:
1. Ausnahme-Filter welche die Ausnahmen maskieren und den Prozess beenden
2. C++ unhandled exceptions (in VS2005 und neuere Visual Studios gelöst)
3. COM maskiert die Ausnahme und die Applikation könnte in einem korrumpierten Stand weiter laufen.
4. Application Bugs die zur unerwarteten Prozess/Applikation Beendung bringen
Die Beendung eines Prozesses kann durch folgende APIs erfolgen:
TerminateProcess
ExitProcess
TermiateThread für den letzten thread
ExitThread für den letzten thread
Einstellungen
Um Berichte von “silent” Prozess Beendungen zu erstellen, können wir folgende Indikatoren benutzen:
· Process name (Image)
Ex: test.exe
· Enable dump collection
Was man bei der Erstellung eines Dump des Prozesses berücksichtigen soll:
- was für einen Dump soll erstellt werden? Mini, Full, etc
- für full Dump kann man die „Custom” Option auswählen und den Custom Wert auf 2 einstellen.
- gültiger Pfad für den Dump ist nötig
- dump folder size: dieser Wert gilt als die maximale Anzahl an Dumps die gespeichert werden, und nicht die Größe des Ordners auf der Platte. Wenn die Limit erreicht wird, werden die ältesten Dumps entfernt.
Werte die für die Bestimmung des Dump-Typs helfen:
typedef enum _MINIDUMP_TYPE {
MiniDumpNormal = 0x00000000,
MiniDumpWithDataSegs = 0x00000001,
MiniDumpWithFullMemory = 0x00000002,
MiniDumpWithHandleData = 0x00000004,
MiniDumpFilterMemory = 0x00000008,
MiniDumpScanMemory = 0x00000010,
MiniDumpWithUnloadedModules = 0x00000020,
MiniDumpWithIndirectlyReferencedMemory = 0x00000040,
MiniDumpFilterModulePaths = 0x00000080,
MiniDumpWithProcessThreadData = 0x00000100,
MiniDumpWithPrivateReadWriteMemory = 0x00000200,
MiniDumpWithoutOptionalData = 0x00000400,
MiniDumpWithFullMemoryInfo = 0x00000800,
MiniDumpWithThreadInfo = 0x00001000,
MiniDumpWithCodeSegs = 0x00002000,
MiniDumpWithoutAuxiliaryState = 0x00004000,
MiniDumpWithFullAuxiliaryState = 0x00008000,
MiniDumpWithPrivateWriteCopyMemory = 0x00010000,
MiniDumpIgnoreInaccessibleMemory = 0x00020000,
MiniDumpWithTokenInformation = 0x00040000
} MINIDUMP_TYPE;
· Enable notification
Für Benachrichtigung bei der Beendung des Prozesses (GUI & im Application Event-log):
Log Name: Application
Source: Microsoft-Windows-ProcessExitMonitor
Event ID: 3000
Task Category: None
Level: Information
Keywords: Classic
Description:
The process 'C:\Program Files\Test\test.exe' exited with exit code 0. The creation time for the exiting process was 0x01caabfb3fa97655.
· Launch monitor process
;der angegebene Prozess wird bei dem “silent process exit” gestartet
;wenn diese Option gewählt wird, wird kein Dump generiert und der „silent exit“ Prozess wird nicht beendet so lange der “monitoring“ Prozess noch läuft.
· Self exit can be ignored
Wenn wir ein Tracing der manuelle Beendung des Prozesses nicht erstellen wollen.
· Global Settings:
Diese Einstellungen werden nur dann benutzt, wenn eine Applikation für den Feld nicht eine Applikation spezifische Einstellung hat.
Wenn eine Applikation für die Überwachung der “silent” Beendungen konfiguriert wird, aber keinen Pfad für die Erstellung der Dumps hat, wird diese den Pfad aus den “global settings” benutzen.
Diese Einstellungen können auch direkt in der Registry definiert werden. Als Beispiel:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\test.exe]
"GlobalFlag"=dword:00000200
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit\test.exe] - für 64 bit Applikationen
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\SilentProcessExit\Test.exe] - für 32 bit Applikationen
"LocalDumpFolder“
"DumpType"
"MaxNumberOfDumpFiles"
"ReportingMode”
Achtung:
!! 64 bit Prozesse werden mit der 64 bit gflags Version konfiguriert
!! 32 bit Prozesse werden mit der 32 bit gflags Version konfiguriert
Der Windows Error Reporting Dienst muss aktiviert/ansprechbar sein.
Gflags.exe ist im Debugging Tools for Windows enthalten.
Verfügbarkeit:
- ab Windows 7 in gflags.exe verfügbar
Oni Sandru
Platforms Core Team