Die Core Leute

Warning: This blog is not maintained any more (no update of content or links – as well as information are might deprecated / not valid any more).

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;


 MINIDUMP_TYPE Enumeration


 


·         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