Das mit dem Debugger getestete Executable endete unerwartet

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Delle
Beiträge: 1118
Registriert: 10.05.2005 22:48

Das mit dem Debugger getestete Executable endete unerwartet

Beitrag 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!
PB 6.02 LTS + Win 11
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Das mit dem Debugger getestete Executable endete unerwar

Beitrag 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.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Das mit dem Debugger getestete Executable endete unerwar

Beitrag von RSBasic »

Verwendest du vielleicht irgendwelche externe DLLs?
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Das mit dem Debugger getestete Executable endete unerwar

Beitrag 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
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
Delle
Beiträge: 1118
Registriert: 10.05.2005 22:48

Re: Das mit dem Debugger getestete Executable endete unerwar

Beitrag 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.
PB 6.02 LTS + Win 11
Benutzeravatar
Delle
Beiträge: 1118
Registriert: 10.05.2005 22:48

Re: Das mit dem Debugger getestete Executable endete unerwar

Beitrag von Delle »

So mit der 32-bit-Version spuckt OnError() zumindest endlich mal bissi mehr Infos aus:

Bild

Schön und gut, aber kann er nicht wenigstens auch die Zeile dazu mit ausspucken oder so?
PB 6.02 LTS + Win 11
Benutzeravatar
hjbremer
Beiträge: 822
Registriert: 27.02.2006 22:30
Computerausstattung: von gestern
Wohnort: Neumünster

Re: Das mit dem Debugger getestete Executable endete unerwar

Beitrag von hjbremer »

Ergebnis = ErrorLine()

siehe Hilfe
Purebasic 5.70 x86 5.72 X 64 - Windows 10

Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
Benutzeravatar
HeX0R
Beiträge: 2954
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win10 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2
Kontaktdaten:

Re: Das mit dem Debugger getestete Executable endete unerwar

Beitrag von HeX0R »

oder einfach das hier nutzen.
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Das mit dem Debugger getestete Executable endete unerwar

Beitrag 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.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Delle
Beiträge: 1118
Registriert: 10.05.2005 22:48

Re: Das mit dem Debugger getestete Executable endete unerwar

Beitrag 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?
PB 6.02 LTS + Win 11
Antworten