Seite 1 von 2
Das mit dem Debugger getestete Executable endete unerwartet
Verfasst: 13.07.2018 20:03
von Delle
Hallo,
ich habe neuerdings diesen tollen Fehler unregelmäßig aller paar Minuten.
Irgendwelche AllocMem-Operationen haben ich nicht, irgendetwas anderes scheint aber regelmäßig zum Absturz zu führen.
Leider sehe ich im Debugger nicht wo zuletzt das Programm war...
Wie gehe ich da jetzt vor um den Fehler zu finden?
Danke!
Re: Das mit dem Debugger getestete Executable endete unerwar
Verfasst: 13.07.2018 21:13
von RSBasic
Wenn du den Fehler nicht mit dem Debugger per Step-to-Step nachvollziehen kannst, dann musst du deinen Code rückwärts auskommentieren. D.h. bestimmte Stellen kommentierst du aus und machst so lange, bis der Fehler nicht mehr auftritt.
\\Edit:
Vielleicht hilft dir OnError weiter? Einfach die Compiler-Option aktivieren, die OnError-Prozedur einbinden und ohne Debugger starten. Damit sollte der Fehler eigentlich abfangbar sein.
\\Edit2:
Tritt der Absturzfehler nur bei einer Anwendung auf oder bei allen? Falls zweiteres, dann teste es mal mit deaktivierter Antivirensoftware.
Re: Das mit dem Debugger getestete Executable endete unerwar
Verfasst: 13.07.2018 21:19
von RSBasic
Verwendest du vielleicht irgendwelche externe DLLs?
Re: Das mit dem Debugger getestete Executable endete unerwar
Verfasst: 13.07.2018 23:05
von mk-soft
Mögliche Ursachen:
- Threads mit Strings ohne Compiler-Option Threadsafe
- API Aufrufe mit fehlerhaften Parameters
- Blödes update von Anti-Viren-Software
Re: Das mit dem Debugger getestete Executable endete unerwar
Verfasst: 14.07.2018 00:15
von Delle
RSBasic hat geschrieben:Wenn du den Fehler nicht mit dem Debugger per Step-to-Step nachvollziehen kannst, dann musst du deinen Code rückwärts auskommentieren. D.h. bestimmte Stellen kommentierst du aus und machst so lange, bis der Fehler nicht mehr auftritt.
Leider tritt es ja nur sporadisch auf, aber ist auskommentieren die beste Wahl?
Vielleicht lieber bei potentiellen "Absturzzeilen" per Debug eine Info ausgeben und gucken WO er immer ungefähr abschmiert?
RSBasic hat geschrieben:
\\Edit:
Vielleicht hilft dir OnError weiter? Einfach die Compiler-Option aktivieren, die OnError-Prozedur einbinden und ohne Debugger starten. Damit sollte der Fehler eigentlich abfangbar sein.
Hab ich eingebaut, bei der Exe schmiert das Programm lautlos ab (beendet sich OHNE Messagebox):
Code: Alles auswählen
Procedure ErrorHandler()
MessageRequester("OnError Test", "Der folgende Fehler trat auf: " + ErrorMessage())
EndProcedure
OnErrorCall(@ErrorHandler())
OnError-Unterstützung bei den Compileroptionen ist natürlich aktiviert.
RSBasic hat geschrieben:Verwendest du vielleicht irgendwelche externe DLLs?
Nicht das ich wüßte.
RSBasic hat geschrieben:
\\Edit2:
Tritt der Absturzfehler nur bei einer Anwendung auf oder bei allen? Falls zweiteres, dann teste es mal mit deaktivierter Antivirensoftware.
Eigentlich nur bei der aktuellen.
mk-soft hat geschrieben:Mögliche Ursachen:
- Threads mit Strings ohne Compiler-Option Threadsafe
Hö? Jegliche Strings die in Threads vorkommen sind gefährlich?
Habe "Thread-sicheres Exe erstellen" angeklickt.
Re: Das mit dem Debugger getestete Executable endete unerwar
Verfasst: 18.07.2018 22:36
von Delle
So mit der 32-bit-Version spuckt OnError() zumindest endlich mal bissi mehr Infos aus:
Schön und gut, aber kann er nicht wenigstens auch die Zeile dazu mit ausspucken oder so?
Re: Das mit dem Debugger getestete Executable endete unerwar
Verfasst: 18.07.2018 22:44
von hjbremer
Ergebnis = ErrorLine()
siehe Hilfe
Re: Das mit dem Debugger getestete Executable endete unerwar
Verfasst: 19.07.2018 00:43
von HeX0R
oder einfach
das hier nutzen.
Re: Das mit dem Debugger getestete Executable endete unerwar
Verfasst: 19.07.2018 08:56
von RSBasic
hjbremer hat geschrieben:Ergebnis = ErrorLine()
siehe Hilfe
@Delle
Wichtig ist, dass du in den Compiler-Optionen die Einstellung "OnError-Unterstützung einschalten" aktivierst, um die Zeile ermitteln zu können.
Re: Das mit dem Debugger getestete Executable endete unerwar
Verfasst: 19.07.2018 14:04
von Delle
RSBasic hat geschrieben:hjbremer hat geschrieben:Ergebnis = ErrorLine()
siehe Hilfe
@Delle
Wichtig ist, dass du in den Compiler-Optionen die Einstellung "OnError-Unterstützung einschalten" aktivierst, um die Zeile ermitteln zu können.
Hab ich!
Code: Alles auswählen
SetGadgetText(#Browser,GetDatabaseString(#DB, DatabaseColumnIndex(#DB, "url")))
StartTime.q = ElapsedMilliseconds()
While GetGadgetAttribute(#Browser, #PB_Web_Busy)
Delay(1)
If(ElapsedMilliseconds() - StartTime)>30000
SetGadgetText(#Browser,GetDatabaseString(#DB, DatabaseColumnIndex(#DB, "url")))
StartTime.q = ElapsedMilliseconds()
EndIf
Wend
Bei SetGadgetText() in der Schleife hängt er sich (manchmal) wegen IMA auf.
Ist evtl. irgendwie einfach der String mit der URL "leer"/NULL und er spinnt deshalb?