Komfortabler Dateimanager mit vielen Funktionen

Saubere Abstürze

By Sven on 16.04.2008 - 10:00 in SpeedCommander 12

Für die nächste Version (12.20) habe ich den Dialog, der nach einem unverhofften Absturz angezeigt wird, etwas funktioneller gestaltet. Per Mausklick kann man das Einstellungsverzeichnis öffnen, in welchem die Reportdateien gespeichert werden, und sich den Fehlerreport auch gleich anschauen:

Hinweis nach Absturz

Beim Klick auf die eMail-Adresse oder auf Fehlerbericht senden wird eine eMail mit Reportdatei und Speicherabbild erstellt, der Anwender muss nur noch eine kurze Beschreibung hinzufügen, nach welcher Aktion der Absturz passierte:

eMail an Support

Voraussetzung dafür ist ein MAPI-kompatibles eMail-Programm, Webmail-Portale müssen hier leider passen.

Es gibt 13 Kommentare zu diesem Beitrag

Trackback URL | RSS-Feed für Kommentare

  1. Jörg sagt:

    Hallo Sven!

    Hast ein paar Informationen (MSDN o.ä.) wo ich Details finden kann wie ich eigene Mini Dumps erstelle und auch einen benutzerdefinierten Absturz Dialog einfügen kann, der anstatt des Windows Standarddialogs angezeigt wird?

  2. Justin sagt:

    @Jörg

    such mal auf http://www.codeproject.com/ nach exception handling, da wirst du einiges finden.

    @Sven
    Beinhaltet die SC.exe Debug-Infos? Oder enthält deine eMail mit dmp und rpt keine Stack-Trace? Bin schon ewig auf der Suche nach einer Möglichkeit, im Stack-Trace Funktion und Zeilennummer zu bekommen, ohne dazu immer eine PDB-Datei der EXE bezufügen. COFF reicht ja anscheinend nicht… 🙁

    Wie macht SC das? Oder ist das auch mal wieder ein Geheimnis? 😉

  3. Sven sagt:

    @Jörg: Mit [url=http://msdn2.microsoft.com/en-us/library/ms680634(VS.85).aspx]SetUnhandledExceptionFilter[/url] installierst Du eine Filterfunktion, die bei einer unbehandelten Exception aufgerufen wird. Zum Erstellen eines Minidumps lädst Du innerhalb Deiner Filterfunktion die Datei dbghelp.dll die Funktion [url=http://msdn2.microsoft.com/en-us/library/ms680360.aspx]MiniDumpWriteDump[/url]. Entsprechend dem Parameter [i]DumpType[/i] fällt der Dump mehr oder weniger umfangreich aus. [url=http://www.debuginfo.com/articles/effminidumps.html]Hier[/url] gibt es auch eine kleine Einführung zu Minidumps.

    @Justin: Der SC selbst enthält keine Debuginfos, diese werden aber in einer PDB-Datei abgelegt. Bei der Erstellung des Reports bzw. des Dumps werden sie nicht benötigt. Zur Fehlersuche muss man einfach die Programmdateien, die dazu passenden PDB-Dateien sowie den Minidump in ein Verzeichnis werfen, den Minidump im VS 2005/2008 öffnen und F5 drücken. Anschließend befindet man sich sofort an der Absturzstelle. Mit Hilfe der Quellcodeinfos in den PDB-Dateien wird dann auch der passende Quelltext angezeigt.

    Bisher habe ich immer noch den [url=http://www.wintellect.com/cs/blogs/jrobbins/archive/2006/04/19/crashfinder-returns.aspx]CrashFinder[/url] von John Robbins verwendet. Der CrashFinder ist aber nur für x32 gedacht, zudem müssen eigene Dlls eine feste Ladeadresse mitbringen. Damit fällt aber leider auch die Verwendung von ASLR unter Vista flach.

  4. Wie programmiert man die Abstürze? 😉

  5. Sven sagt:

    Nichts einfacher als das. 😉

    int* pTest = NULL;
    *pTest = 1;
    
  6. Jörg sagt:

    @Justin, Sven
    Danke, ich werde mich mal schlau machen.

  7. Justin sagt:

    Thx für die Info Sven. VC6 kann MiniDumps wohl nicht laden oder?

  8. Justin sagt:

    Hmm, also wenn ich die dmp-File in VS2008 lade, geht das nur, wenn die PDB-, DMP- und EXE-File mit der DEBUG-Konfig (in VC6). erstellt wurden… Was mach ich falsch?

  9. Sven sagt:

    Du musst auch für die Relase-Konfiguration die Erstellung von PDB-Dateien aktivieren (C++ – Allgemein – Programmdatenbank). Zudem muss auf der Linker-Seite „Debug-Info generieren“ aktiviert werden.

  10. Justin sagt:

    Danke 🙂 Ist es korrekt, dass der VC2008 Debugger eine Zeile nach der eigentlich Exception stehen bleibt und dann die Fehlermeldung bringt? Ist zumindest hier so (VC2008 Express)

  11. Sven sagt:

    Hmm, bei mir bleibt er in der betroffenen Zeile stehen. Vielleicht hat es mit den VC6-PDBs zu tun?

  12. Justin sagt:

    Ne, hab den Fehler schon gefunden… Die EXE darf natürlich nicht laufzeitgepackt werden… O:)

  13. Oliver sagt:

    Wer VC6 hat, könnte sich doch auch einfach kostenlos WinDbg (einfach im Inet suchen ;)) runterladen und benutzen, oder? Ist definitiv den Download wert. IMO einer der besten Debugger. Auf einem „Bare-Metal“ Testsystem benutze ich immer WinDbg und ggf. Application Verifier. Das schöne ist, daß man nicht auf Visual Studio angewiesen ist, es also ggf. auch mal schnell auf nem Kundenrechner im Support einrichten kann und dann einfach den Symbolserver einstellt und sich an – bspw. – den abgestürzten Prozeß ranhängt.

    Abgesehen von Usermode-Debugging, kann der WinDbg natürlich auch Kernelmode-Debugging und ist wohl seit SoftICE eingestellt wurde, der einzige gute Debugger welcher beide Welten bedient. Auch wenn OllyDbg sicherlich seine Berechtigung hat und ich persönlich auch IDA mal gern für UM-Debugging einsetze.

    Also einfach mal umschauen. Debuggen geht auch komplett ohne Visual Studio – auch sog. „Source Debugging“ 😉 … das Buch „Advanced Windows Debugging“ kann man dafür nur empfehlen.

    // Oliver

Top