Exception Filter Alpha
-
Hallo zusammen,
nun möchte ich hier auch mal mein derzeitiges Projekt zum Testen bereitstellen.
Wie der Titel schon sagt, handelt es sich meines Erachtens noch um eine Alpha,jedoch nicht wegen der Stabilität
(ich halt es für recht stabil), sondern wegen den noch fehlenden Funktionen.Es handelt sich um einen Exception Filter, der *ungehandelte* Exceptions des gesamten Programmes (EXE und DLLs) auffängt.
Dazu gehören z.B. Access Violations, Intiger divide by zero usw. usw.
Bei einer Exception werden zahlreiche nützliche Informationen über den Computer, laufende Programme, geladenen Dlls und natürlich ein Stacktrace bishin
zum Memorydump und Disassembler zusammengefasst. Der User wird mit einer Meldung informiert und kann nun entscheiden ob es das Programm
weiterführen (funktioniert nicht immer), Neustarten oder Beenden möchte.Wie schon gesagt fehlen noch einige Funktionen so z.B. der geplante email-Versand auch wenn das Häckchen in der GUI gesetzt ist.
Ich denke aber, dass es besser ist die Library schon jetzt zu *veröffentlichen* als länger zu warten, einfach um schon mehr Informationen von kompetenten Testern zu erhalten.Source kann/will ich dazu aber leider nicht veröffentlichen, da ich einen späteres kommerziellen Verkauf nicht ausschließe.
Ich hoffe trotzdem, dass ihr die Library mal testet. Wenn ihr aufgrund möglicher Trojaner usw. sie nicht benutzen möchtet, müsste halt mal ein hier bekannter User
die Library testen und den anderen bestätigen, dass es wirklich nur das tut was es soll.Natürlich möchte ich nicht abstreiten, mir Ideen bei anderen z.B. Jochen Kalmbachs genialen Artikel über dieses Thema geholt zu haben,
allerdings habe ich keinerlei Code abgeschrieben o.ä.!
Hier gehts zu Jochens Artikel: http://www.codeproject.com/threads/StackWalker.aspIch freue mich über *jeglichen* Feedback, besonders konstruktiven
z.B. über gefundene Bugs, was ihr anderst machen würdet, was ihr euch wünschen würdet und auch ob ihr dies in eurem Programm nutzen würdet.Die Library mit Beispiel Loader (inkl. Source des Loaders) könnt ihr hier herunterladen:
http://rapidshare.de/files/31320331/Exception_Filter.zip.htmlAnsonsten auch einfach mal in die Readme.txt schauen.
MfG
yogle
-
Ich habe zwar keine Verwendung dafür, aber ein paar Dinge kann ich dir auch so sagen
Erstmal: ganz gute Idee, vor allem für jene die noch keine Ahnung davon haben.yogle schrieb:
Bei einer Exception werden zahlreiche nützliche Informationen über den Computer, laufende Programme, geladenen Dlls und natürlich ein Stacktrace bishin
zum Memorydump und Disassembler zusammengefasst. Der User wird mit einer Meldung informiert und kann nun entscheiden ob es das Programm
weiterführen (funktioniert nicht immer), Neustarten oder Beenden möchte.- Informationen über den Computer ist OK, kommt halt drauf an welche genau das sind.
- Eine Liste der laufenden Programme hat da allerdings nicht verloren. Niemand wird es gerne sehen dass ein Programm 'rumschnüffelt', welche anderen Programme laufen (als Beispiel die Aufregung über 'Warden' in World of Warcraft, welches Programme sogar nur nach bekannten Cheats scannt und nicht einmal die Liste überträgt). In 99.99% der Fälle wird diese Information ohnehin unwichtig sein.
- geladene DLLs, Stacktrace, Memorydump, Code: Dafür kann man sich bequem Minidumps anlegen lassen, welche all die Informationen bereits enthalten und mit denen man unter Verwendung des Quellcodes direkt an der Fehlerquelle edbuggen kann.Das mit der Entscheidung Neustart / Beenden finde ich ganz interessant. Besonders Dämon-Programme u.Ä. sollten eine Option haben, nach einem Absturz automatisch neu zu starten (für eMule sicher ganz nützlich ;))
-
Hallo neku,
danke erstmal das du dir die Lib angeschaut hast.
- Eine Liste der laufenden Programme hat da allerdings nicht verloren. Niemand wird es gerne sehen dass ein Programm 'rumschnüffelt', welche anderen Programme laufen (als Beispiel die Aufregung über 'Warden' in World of Warcraft, welches Programme sogar nur nach bekannten Cheats scannt und nicht einmal die Liste überträgt). In 99.99% der Fälle wird diese Information ohnehin unwichtig sein.
Der Meinug bin ich eigentlich auch. In späteren Version soll dem User und/oder dem Programmier dann die Möglichkeit gegeben werden zu entscheiden welche Informationen versendet werden sollen.
- geladene DLLs, Stacktrace, Memorydump, Code: Dafür kann man sich bequem Minidumps anlegen lassen, welche all die Informationen bereits enthalten und mit denen man unter Verwendung des Quellcodes direkt an der Fehlerquelle edbuggen kann.
Minidumps kenne ich, allerdings benötigt man VS oder WinDbg um diese debuggen zu können, soweit ich weiß. Ich wollte einfach unabhängig bleiben, überlege aber ob ich diese mit einbauen soll.
MfG
yogle
-
yogle schrieb:
Minidumps kenne ich, allerdings benötigt man VS oder WinDbg um diese debuggen zu können, soweit ich weiß. Ich wollte einfach unabhängig bleiben, überlege aber ob ich diese mit einbauen soll.
Minidumps haben meine Debugarbeit enorm erleichtert, also auf jeden Fall:
-
Minidump:
#include <windows.h> #include <tchar.h> #include <dbghelp.h> #pragma comment(lib, "Dbghelp.lib") LONG WINAPI MyUnhandledExceptionFilter(EXCEPTION_POINTERS* ExceptionInfo) { TCHAR szDumpFile[1024]; GetModuleFileName(NULL, szDumpFile, sizeof(szDumpFile) / sizeof(TCHAR)); _tcscat(szDumpFile, _T(".exp.dmp")); HANDLE hDumpFile = CreateFile(szDumpFile, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL); if (hDumpFile != INVALID_HANDLE_VALUE) { MINIDUMP_EXCEPTION_INFORMATION expi; expi.ThreadId = GetCurrentThreadId(); expi.ClientPointers = NULL; expi.ExceptionPointers = ExceptionInfo; MiniDumpWriteDump( GetCurrentProcess(), GetCurrentProcessId(), hDumpFile, MiniDumpNormal, &expi, NULL, NULL); CloseHandle(hDumpFile); } return EXCEPTION_CONTINUE_SEARCH; } int _tmain() { SetUnhandledExceptionFilter(MyUnhandledExceptionFilter); char *szTest = NULL; strcpy(szTest, "Hallo Welt"); // BANG... }
PS: Minidumps ist die einzig sinnvole Möglichkeit einen Crash zu "sichern" um ihn später debuggen zu können. Wenn Du nur z.B: den Callstack dir Speicherst, wird es nur sinnvol funktionieren, wenn Du Debug-Symbole auf dem Zielrechner hast; und die liefert man normalerweise nicht mit.
Auch ist WinDbg kostenlos und somit zur Analyze der Minidumps am besten geignet.
-
Ja ich werde Minidumps reibauen!
Wenn Du nur z.B: den Callstack dir Speicherst, wird es nur sinnvol funktionieren, wenn Du Debug-Symbole auf dem Zielrechner hast; und die liefert man normalerweise nicht mit.
Jep richtig, aber man hat die Offsets und ich will noch ein Tool programmieren über das man mithilfe dieser Offsets und den Debugsymbolen auf dem Rechner des Programmierers die Symbole auslesen/anzeigen kann. Die *.pbd Datei mitzuliefern würde das Reverse Engineeren wohl zu stark fördern.
Gruß
yogle