Projekt- und Programmabsturz nach Benutzung auf *.pbi ausgelagerter Prozeduren im Compilat

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
#NULL
Beiträge: 2235
Registriert: 20.04.2006 09:50

Re: Projekt- und Programmabsturz nach Benutzung auf *.pbi ausgelagerter Prozeduren im Compilat

Beitrag von #NULL »

iwelx hat geschrieben: 28.01.2022 01:16 Bei Auskommentieren dieser Zeilen ist der Fehler weg. Das scheint mir eindeutig zu sein.
Leider ist das nicht immer so. Bestimmte Fehler können sonstwo auftreten, oder auch zu einem späteren Zweitpunkt, bzw können temporär 'verschwinden'.
- Du kannst es mal mit dem Purifier versuchen:

Code: Alles auswählen

; enable purifier: compiler options > compile/run > [x] enable purifier
PurifierGranularity(1,1,1,1)
- Wie ich das verstehe, stürtzt die IDE ab während dein Program läuft, richtig? Gibt es einen Unterschied mit/ohne Debugger, bzw mit externem Debugger, bzw mit erstellter executable ohne IDE/Debugger etc.?
my pb stuff..
Bild..jedenfalls war das mal so.
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: Projekt- und Programmabsturz nach Benutzung auf *.pbi ausgelagerter Prozeduren im Compilat

Beitrag von ccode_new »

iwelx hat geschrieben: 27.01.2022 23:44 Wenn die IDE nicht abgeschossen wird, finden sich im Fehlerbericht viele Warnungen der Art :
CODE: SELECT ALL

[WARNING] MeinProgramm.pb (Zeile: 3363)
[WARNING] GdkPixbuf (DEBUG): gdk_pixbuf_from_pixdata() called on:
[WARNING] MeinProgramm.pb (Zeile: 3363)
[WARNING] GdkPixbuf (DEBUG): Encoding raw
[WARNING] MeinProgramm.pb (Zeile: 3363)
[WARNING] GdkPixbuf (DEBUG): Dimensions: 14 x 14
[WARNING] MeinProgramm.pb (Zeile: 3363)
[WARNING] GdkPixbuf (DEBUG): Rowstride: 56, Length: 808
[WARNING] MeinProgramm.pb (Zeile: 3363)
[WARNING] GdkPixbuf (DEBUG): Copy pixels ==
Diese Warnungen müssten aber auch ohne eine Auslagerung der Proceduren kommen.
Also unabhängig deines Problems.

Aber die Warnungen sind nicht ganz unbedenklich, weil PureBasic hier eine veraltete Funktion nutzt.

gdk_pixbuf_from_pixdata’ is deprecated
(laut Gtk-Dokumentation)
Diese Funktion sollte also in neueren Programmen nicht mehr verwendet werden.
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
iwelx
Beiträge: 8
Registriert: 26.01.2022 18:38

Re: Projekt- und Programmabsturz nach Benutzung auf *.pbi ausgelagerter Prozeduren im Compilat

Beitrag von iwelx »

Folgedes kleine Programm habe ich auf Debian 10, Debian 11 und Linux Mint 20.3 getestet. Alle 3 im Multiboot auf demselben PC.

Code: Alles auswählen

;Main_Window.pb

;Windows
Enumeration 
  #Main_Window
  #Sub_Window
EndEnumeration 

Global Font = LoadFont(2, "Liberation Mono", 10, #PB_Font_Bold)

Procedure Open_Main_Window() 
  If OpenWindow(#Main_Window, 400, 300, 300, 100, "Main_Window",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar ) 
    If UseGadgetList(WindowID(#Main_Window)) 
      TextGadget(PB_Any, 10, 30, 250, 80, "Main Window", #PB_Text_Center) 
      SetGadgetFont(PB_Any, Font)      
    EndIf 
  EndIf 
EndProcedure 

XIncludeFile "Sub_Window.pbi"

Open_Main_Window() 
Open_Sub_Window()

Repeat   
  
  Event = WaitWindowEvent()  
  
  WindowID = EventWindow() 
  
  If WindowID = #Main_Window 
    If Event = #PB_Event_CloseWindow 
      CloseWindow(#Main_Window) 
    EndIf 
  EndIf 
  
Until WindowID = #Main_Window And Event = #PB_Event_CloseWindow 

End

;#####################################################################

;Sub_Window

Procedure Open_Sub_Window()
  If OpenWindow(#Sub_Window,600,500,300,100,"Sub_Window")  ;,#PB_Window_SystemMenu) 
  EndIf
  
;   OptionGadget(#PB_Any, 100, 20, 50, 25, "Text")  
  
EndProcedure
Auch die mit
ldd -v purebasic,
checkinstall.sh, und
sudo apt-get install -s gcc g++ libc6-dev libsdl1.2-dev libgtk-3-dev unixodbc-dev libgnome2-dev libxine2-dev libwebkitgtk-3.0-dev libxxf86vm-dev libwebkitgtk-dev libwebkitgtk-3.0-dev
ermittelten SW-Stände sind dieselben.

Um keine evtl. versteckten Fehler aus *.pb und *.pbi mitzuschleppen, habe ich das Testprogramm in jede IDE neu aus einer Textdatei übertragen.

Auf Debian 10 mit PB 5.72 und Linux Mint mit PB 5.73 habe ich den Effekt, daß bei Ausführung mit Blockkommentierung beim OptionGadget... im Sub_Window die IDE geöffnet bleibt. Wird die Blockkommentierung entfernt, wird die IDE bei Ausführung des Programms sofort geschlossen.

In Debian 11 mit PB 5.73 wird das jedoch korrekt ausgeführt und die IDE bleibt in beiden Fällen geöffnet.


Ich umgehe den Fehler jetzt, indem ich auf Auslagerung der kritischen Prozeduren in eine *.pbi verzichte. Die Sache hat sich damit hier erledigt. Nochmals Dank an Euch.

Gruß iwelx
iwelx
Beiträge: 8
Registriert: 26.01.2022 18:38

Re: Projekt- und Programmabsturz nach Benutzung auf *.pbi ausgelagerter Prozeduren im Compilat

Beitrag von iwelx »

Ergänzend habe ich das jetzt auf dem gleichen PC noch unter Windows 10 getestet. Da läuft das absolut stabil. Auch in meinem Projekt können da die Prozeduren in *.pbi ausgelagert werden, die unter Linux damit Probleme machen. Also PureBasic und Linux ?

Gruß iwelx
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: Projekt- und Programmabsturz nach Benutzung auf *.pbi ausgelagerter Prozeduren im Compilat

Beitrag von ccode_new »

Benutze ein anderes Subsystem!!!

gtk2, oder qt

Menü->Compiler->Compiler-Optionen->
In die Zeile: "Library Subsystem" schreibst du jetzt einfach "gtk2". (oder "qt") -Ohne Anführungszeichen!

Mit gtk3 stützt die IDE ab.
Das kann ich dir auch zu 100% bestätigen.

Das hier: (Warnung)
unsetenv() is not thread-safe and should not be used after threads are created

verträgt sich so gar nicht mit dem PureBasic-Debugger.
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
iwelx
Beiträge: 8
Registriert: 26.01.2022 18:38

Re: Projekt- und Programmabsturz nach Benutzung auf *.pbi ausgelagerter Prozeduren im Compilat

Beitrag von iwelx »

Hab das jetzt in PB 5.73 unter Mint 20.3 mit qt ausgeführt und es scheint stabil zu laufen. Keine Abstürze mehr sowohl mit integriertem als auch mit eigenständigem Debugger (vorher mit beiden). Besten Dank für Deinen nochmaligen und etwas ausführlicheren Hinweis.
Antworten