Jit-Debugger aktivieren (Framework 1.1) (...per machine.config greift nicht)

26/09/2008 - 11:17 von Armin Zingler | Report spam
Hallo miteinander,

**** Kurzversion ****

trotzdem ich in der machine.config und in der anwendung.exe.config folgende
Zeile(n) hinzugefügt habe

<system.windows.forms jitDebugging="true" />

kommt der Standard-Fehlerdialog beim Ausführen einer Exe ohne angehàngtem
Debugger. Das ist der mit dem Hinweis unten, dass man diese Zeile hinzufügen
soll. Habe ich, dennoch kommt der Dialog. Auch nach Rechner-Neustart. Was
muss ich noch aktivieren? Der Fehlerdialog kommt trotz eigener
try-catch-Fehlerbehandlung, die offenbar nicht greift. Es ist ein
Entwicklungsrechner auf dem VS 2003 ist installiert, also ein Debugger
vorhanden ist.




**** Wer's ausführlicher mag ****

Es gibt eine managed.dll die per COM-Interop einem VB6-Client ("client.exe")
zur Verfügung steht. Ich teste den VB6-Client in der VB6-IDE. Der Client
ruft eine Methode einer Klasse in der managed.dll auf. Diese Methode enthàlt
eine Try-Catch-Block. Im Try-Abschnitt wird ein Dialog modal angezeigt.
Dabei tritt ein Fehler auf. Mein Problem ist nicht der Fehler, sondern was
aufgrund des Fehlers passiert: Normalerweise sollte der Try-catch-Block
diesen Fehler abfangen. Das passiert nicht. Stattdessen wird der o.g.
Standard-Dialog (mit Buttons [Detail] und [Weiter]) angezeigt. Bei Klick auf
[Weiter] wird mein modaler Dialog trotzdem angezeigt.

Ich kenne diese Situation durchaus! Bisher habe ich sie durch Eintragen der
o.g. Zeile in der machine.config behoben. Die Zeile ist aber schon drin (ja,
ist korrekt drin). Zusàtzlich, eigentlich überflüssigerweise, habe ich auch
die vb6.exe.config-Datei ergànzt. Keine Wirkung.

Was auffàllt: Der Callstack im Standard-Fehlerdialog des Frameworks enthàlt
überhaupt nicht meine Methode, in der ich meinen modalen Dialog anzeige. Er
enthàlt nur Prozeduren in System.Windows.Forms und dann meinen
Ereignishandler für das Load-Ereignis der Form, in dem der Fehler auftritt.
Also:
at MeinDialog_Load in C:\Dokumente und Einstellungen\[...]:line 1914
at System.Windows.Forms.Form.OnLoad(EventArgs e)
[...]
at System.Windows.Forms.ControlNativeWindow.WndProc
at System.Windows.Forms.NativeWindow.Callback

Der Callstack sieht anders aus wenn ich VS 2003 zum Debuggen verwende.
Konkret: Ich lade das Source-Projekt der managed.dll und gebe in den
Projekteigenschaften unter "Debuggen -> Externes Programm starten" die
Vb6.exe an. Ich starte das Projekt, d.h. die Vb6.exe wird gestartet. Darin
lade ich den Source-Code der client.exe und starte dies ebenfalls. Wenn nun
der Fehler auftritt wird nicht der Standard-FehlerDialog angezeigt sondern
der Fehler wird durch meinen Try-Catch-Block abgefangen. Jetzt greift dieser
also. Darin wird übrigens mein eigener Fehlerdialog angezeigt, auch inkl
Callstack. In diesem ist nun auch meine Methode, die meinen modalen Dialog
anzeigt, enthalten. Also:

Stapel:
at MeinDialog_Load in C:\Dokumente und Einstellungen\[...]:line 1914
at System.Windows.Forms.Form.OnLoad(EventArgs e)
[...]
at System.Windows.Forms.Form.ShowDialog()
at MeineMethode

Dass Try-Catch nicht greift, liegt sicher daran, dass der Dialog offenbar
nicht dort angezeigt wird wo der Aufruf (Showdialog) im Code steht. Kann das
etwas mit Threading zu tun haben? Kann es sein, dass das Framework den
Dialog in einem anderen Thread, in dem meine Try-Catch-Block natürlich nicht
vorhanden ist, anzeigt?



So, vielen Dank für's lesen!



Armin
 

Lesen sie die antworten

#1 Armin Zingler
26/09/2008 - 11:31 | Warnen spam
"Armin Zingler" schrieb

Ich bitte alle Leser um Verzeihung, da ich die Lösung soeben selbst gefunden
habe. Meine eigene Aussage...

Dass Try-Catch nicht greift, liegt sicher daran, dass der Dialog offenbar
nicht dort angezeigt wird wo der Aufruf (Showdialog) im Code steht. Kann
das
etwas mit Threading zu tun haben? Kann es sein, dass das Framework den
Dialog in einem anderen Thread, in dem meine Try-Catch-Block natürlich
nicht
vorhanden ist, anzeigt?



...hat mich darauf gebracht. Nachdem ich das STAThread-Attribut auf die
Methode angewandt habe, funktioniert es. Sorry nochmal! Hatte zuvor aber
schon stundenlang gesucht. :-/


Armin

Ähnliche fragen