Frage

Ich habe eine Windows Forms-Anwendung (.NET 4), die in meiner Entwicklungsmaschine gut läuft, jedoch auf zwei anderen Testmaschinen stürzt.Ich kann den Minidumpe laden, der es in VS2010 erstellt.

Die Wahl für "Debuging mit gemischten" führt zu anscheinend endlos (ich tötete Devenv nach etwa 20 Minuten) Missbrauch der CPU durch visuelle Studio.

Wenn ich nur mit Native debuggen kann, kann es nicht die Quelle finden (obwohl ich die Quelle in demselben Ordner wie auf der Testmaschine gespiegelt habe).Es sagt einfach:

Ausnahme von 0x793f5b8c in yourwinApp .exe.hdmp: 0xc0000409: 0xc0000409.

und zeigt mir dann

Anrufstapel Ort: clr.dll! 793f5b8c ()

Wie würde ich herausfinden, was die Anwendung zum Absturz verursacht?Kann ich einen vollen Crashdump nehmen, während der Dialog "Microsoft" Microsoft "angezeigt wird, und würde das helfen?

War es hilfreich?

Lösung

Minidump-Debugging sollte in VS2010 städtisch verbessert werden. Ich habe noch nicht viele Beweise dafür gesehen, aber das Mixed-Modus-Debugging sieht so unbeholfen aus, als wäre es vorher, als ich einige schnelle Tests tat. Nimm mein Wort nicht dafür. Native-nur ist, dass Sie jedoch niemals einen verwalteten Anrufstapel zeigen.

diese an der Quelle angehen. Schreiben Sie einen Event-Handler für appdomain.currentdomain.unhandledexception und registrieren Sie es in Ihrer Main () -Methode. Lassen Sie den Wert von E.ExceptionObject.tostring () in, sagen, ein Meldungsfeld an. Das bringt Ihnen die verwaltete Stapelspur der Ausnahme. Während dieses Meldungsfeld angezeigt wird, können Sie auch den Minidump aufnehmen, um Sie an den Crash-Standort näher zu bringen.

Die spezielle Ausnahme, die Sie erhalten, zeigt jedoch auf jeden Fall auf ein nativem C / C ++ - Code. Ein Pufferüberlauf, der den Stapel beschädigt. Stellen Sie sicher, dass Sie über die .pdb-Dateien für einen nativen Code verfügen, der Ihre App verwendet. Und richten Sie den Microsoft-Symbol-Server ein, sodass Sie eine gute Native Stack-Spur von der Minidump erhalten.

edit: Die Tatsache, dass Sie keine UnhandedException erhalten, zeigt definitiv auf die Stapelintegritätsprüfung in der CRT. Es wurde so konzipiert, dass nicht eine Ausnahme anhebt, aber das Programm sofort enden. Notwendiges Verhalten, da der Stapel beeinträchtigt wird, kann der Code nicht annehmen, dass es sicher abgewickelt werden kann. Angesichts des Crash-Standorts ist es wahrscheinlich, dass diese Prüfung tatsächlich im CLR-Code ausgeführt wird. Ich weiß, dass dies in vorherigen CLR-Versionen nicht fertig wurde, aber das könnte sich in der CLR-Version unterscheiden, die mit .NET 4.0

enthalten ist

Dies wird es ziemlich schwierig machen, eine verwaltete Stack-Trace zu erhalten. Es gibt viel, in dem Sie den Ingenieur von der nicht verwalteten Stack-Trace umkehren können, solange Sie den Symbolserver einrichten, so dass Sie Identifier-Namen von den CLR-Stapelrahmen erhalten. Stellen Sie diesen Stack-Trace in Ihrer Frage auf, wenn Sie möchten, dass Sie Hilfe interpretieren möchten. Ein Fehler im CLR-Code ist nicht unwahrscheinlich BTW, Sie möchten möglicherweise in Betracht ziehen, Microsoft-Support anzurufen. Sie benötigen jedoch einen konsistenten Repro. Sie können mit dieser wichtigen Stapelverfolgung tun, wenn die Repro zu kämpfen ist. Setzen Sie den Symbolserver ein, um eine gute nicht verkaufte Stack-Trace zu erhalten. Einfach in VS2010: Tools + Optionen, Debugging, Symbole, Zecken Sie "Microsoft Symbol Server".

Andere Tipps

Sie konfigurieren procdump , um den vollständigen Speicherabzug zu erhalten, wenn die Anwendunghat eine Ausnahme geschmückt, die Sie in vs oder windbg debuggen können

und der minidump hat Anrufstapelinformationen als Watson-Eimer, hier ist eine von CLR Team und ich schrieben über den gleiche

Eine kurze Erklärung zu den Watson-Bucket-Informationen, die Sie in Event-Viewer für unbehandelte Ausnahme sehen

    .
  1. exefileName
  2. exe montage version
  3. exe montage timestamp
  4. vollständiger Name
  5. Fehlerende Montageversion
  6. fehlerhafte Montagezeitstempel
  7. Fehlerende Montage-Methode Def
  8. Fehlerbehebung IL-Anweisung, die die Ausnahme verursacht hat
  9. Ausnahmeart
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top