Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
r5596 - CTD bei Linienänderung
#11
Also .. auch ein neukompiliertes Simutrans (V5599) und nicht das vom nightly-Server gibt dieses Problem. Könnte es ein 64-Bit-Problem sein?
Edit: Ein Kurztest mit Windows32 hat hier auch keine Probleme bereitet

Da ich das selbstgebaute nicht "gestript" habe, hier ein verbesserter Output

Code:
Message: karte_t::interactive_event():    Keyboard event with code 0 '?'
Message: karte_t::interactive_event():    Keyboard event with code 0 '?'
Message: karte_t::interactive_event():    Keyboard event with code 0 '?'
Message: karte_t::interactive_event():    Keyboard event with code 0 '?'
Message: gui_scrolled_list_t::infowin_event():    selected -1
Message: gui_scrolled_list_t::show_selection():    sel=22, offset=143, groesse.y=146
Message: karte_t::interactive_event(event_t &ev):    calling a tool
Message: simline_t::register_stops():    3 fpl entries in schedule 0x6a65520
Message: simline_t::renew_stops():    Line id=135, name='RB 04'

Program received signal SIGSEGV, Segmentation fault.
0x0000000000464929 in operator== (a=..., b=...)
    at dataobj/../boden/../dataobj/koord3d.h:84
84        return ((a.x-b.x)|(a.y-b.y)|(a.z-b.z))==0;

(gdb) bt
#0  0x0000000000464929 in operator== (a=..., b=...)
    at dataobj/../boden/../dataobj/koord3d.h:84
#1  0x00000000004657b1 in schedule_t::matches (this=0x6a65520, welt=0x15cf9f0,
    fpl=0x6b6a550) at dataobj/fahrplan.cc:268
#2  0x00000000005273cc in schedule_list_gui_t::zeichnen (this=0x71eb0c0,
    pos=..., gr=...) at gui/schedule_list.cc:493
#3  0x00000000005ea35c in display_win (win=0) at simwin.cc:813
#4  0x00000000005ea56b in display_all_win () at simwin.cc:846
#5  0x00000000005ec5f4 in win_display_flush (konto=439808138.22000003)
    at simwin.cc:1394
#6  0x00000000005b1385 in intr_refresh_display (dirty=false) at simintr.cc:75
#7  0x00000000005fb93b in karte_t::sync_step (this=0x15cf9f0, delta_t=38,
    sync=true, display=true) at simworld.cc:2825
#8  0x00000000005b14d6 in interrupt_check (
    caller_info=0x67265a "simworld.cc:5830") at simintr.cc:102
#9  0x0000000000608e80 in karte_t::interactive (this=0x15cf9f0,
    quit_month=2147483647) at simworld.cc:5830
#10 0x00000000005b8ea9 in simu_main (argc=5, argv=0x7fffffffdf38)
    at simmain.cc:1079
#11 0x00000000005c8840 in sysmain (argc=5, argv=0x7fffffffdf38)
    at simsys.cc:622
#12 0x000000000063d287 in main (argc=5, argv=0x7fffffffdf38) at simsys_s.cc:593
P.S: Kennt jemand eine "gute" Kuranleitung für gdb?
Rechtschreibfehler sind gewollt und unterliegen dem Copyright des Verfassers, es sei denn, sie sind expliziet unter die GPL gestellt ....

Für "Simutrans-Nightlys" und aktuelle PAK: http://nightly.simutrans-germany.com
Zitieren
#12
Ich empfehle ein graphics Backend ... Nee, gdb ist recht kompliziert. Im konkreten Fall kann allerdings nur a or b ungültig sein. Evt. mal print a order print b versuchen.

Ich vermute fast ein COmpilerfehler, wenn es nur bei dir auftritt. ABer ich werde mein 64bit Ubuntu anwerfen.
Zitieren
#13
Also reproduzierbar auf 2 Linux-PC .. allerdings alle 64 Bit Gentoo

Kennst Du ein "gutes" Front-End dafür?
Rechtschreibfehler sind gewollt und unterliegen dem Copyright des Verfassers, es sei denn, sie sind expliziet unter die GPL gestellt ....

Für "Simutrans-Nightlys" und aktuelle PAK: http://nightly.simutrans-germany.com
Zitieren
#14
ich vermute mal, dass der Pointer schedule_list_gui_t::last_schedule ins Nirwana zeigt.

@wernie: kannst du bitte bei dem crash im gdb eintippen:
Code:
select-frame 1
print *this
print *fpl
Zitieren
#15
Heute Abend ... uff Arbeit geht schlecht ;o)
Rechtschreibfehler sind gewollt und unterliegen dem Copyright des Verfassers, es sei denn, sie sind expliziet unter die GPL gestellt ....

Für "Simutrans-Nightlys" und aktuelle PAK: http://nightly.simutrans-germany.com
Zitieren
#16
Hier das Ergebnis:

Code:
Message: toolbar_t::update():    update toolbar EDITTOOLS
Message: toolbar_t::update():    update toolbar LISTTOOLS
Message: karte_t::interactive_event():    Keyboard event with code 0 '?'
Message: karte_t::interactive_event():    Keyboard event with code 0 '?'
Message: karte_t::interactive_event():    Keyboard event with code 0 '?'
Message: karte_t::interactive_event():    Keyboard event with code 0 '?'
Message: gui_scrolled_list_t::infowin_event():    selected -1
Message: gui_scrolled_list_t::show_selection():    sel=22, offset=143, groesse.y=146
Message: karte_t::interactive_event(event_t &ev):    calling a tool
Message: simline_t::register_stops():    3 fpl entries in schedule 0x7fffe1acbed0
Message: simline_t::renew_stops():    Line id=135, name='RB 04'

Program received signal SIGSEGV, Segmentation fault.
0x0000000000464929 in operator== (a=..., b=...)
    at dataobj/../boden/../dataobj/koord3d.h:84
84        return ((a.x-b.x)|(a.y-b.y)|(a.z-b.z))==0;
(gdb) select-frame 1
(gdb) print *this
$1 = {_vptr.schedule_t = 0x662e30, eintrag = {data = 0x7fffe1ab1450,
    size = 3 '\003', count = 3 '\003'}, abgeschlossen = true,
  aktuell = 0 '\000', static dummy_eintrag = {pos = {x = -1, y = -1,
      z = -1 '\377', static invalid = {x = -1, y = -1, z = -1 '\377',
        static invalid = <same as static member of an already seen type>}},
    ladegrad = 0 '\000', waiting_time_shift = 0 '\000'}}
(gdb) print *fpl
$2 = {_vptr.schedule_t = 0x9007d00b50024, eintrag = {data = 0x87,
    size = 2 '\002', count = 2 '\002'}, abgeschlossen = true,
  aktuell = 0 '\000', static dummy_eintrag = {pos = {x = -1, y = -1,
      z = -1 '\377', static invalid = {x = -1, y = -1, z = -1 '\377',
        static invalid = <same as static member of an already seen type>}},
    ladegrad = 0 '\000', waiting_time_shift = 0 '\000'}}

P.S. wenn ich die Änderung mit nigtly 5408 durchführe und abspeicher, kann ich es auch im neueren weiterspielen

P.P.S Habe jetzt auf diesem Rechner mehrere Versionen durchkompiliert um es einzukreisen. Dabei auch die funktionierende 5408 neu, so das alle mit der gleichen GCC Version. Problem entstand zwischen der Version 5408, 5420 (funktioniert) und 5450 (CTD). Versuche es noch weiter einzugrenzen....
Rechtschreibfehler sind gewollt und unterliegen dem Copyright des Verfassers, es sei denn, sie sind expliziet unter die GPL gestellt ....

Für "Simutrans-Nightlys" und aktuelle PAK: http://nightly.simutrans-germany.com
Zitieren
#17
Da kam im Fahrplanfenster eigentlich nur die dynamische Größenanpassung dazu.
Zitieren
#18
Mein Rechner "glüht" gerade vom Compilieren.

Aktuell eingegrenzt zwischen 5440,5442,5443 (funzt) und 5444,5445 (CDT).

Schein ja auch ein sehr spezielles Problem zu sein, wenn es "nur" die Linux64-Bit-Version hat :o(

sagt Dir die Ausgabe des gdb etwas?

Edit: Funktionierende Versionen
Edit2: Nicht Funktionierende Versionen

Ergebnis: Problem entstand zwischen 5443 und 5444
Rechtschreibfehler sind gewollt und unterliegen dem Copyright des Verfassers, es sei denn, sie sind expliziet unter die GPL gestellt ....

Für "Simutrans-Nightlys" und aktuelle PAK: http://nightly.simutrans-germany.com
Zitieren
#19
svn diff -r 54443:5444 zeigt die änderungen:
Code:
$ svn diff -r 5443:5444
Index: gui/schedule_list.h
===================================================================
--- gui/schedule_list.h (revision 5443)
+++ gui/schedule_list.h (revision 5444)
@@ -42,7 +42,7 @@
        sint32 selection, capacity, load, loadfactor;

        uint32 old_line_count;
-       sint32 last_schedule_count;
+       schedule_t *last_schedule;
        uint32 last_vehicle_count;

        // only show schedules containing ...
Index: gui/schedule_list.cc
===================================================================
--- gui/schedule_list.cc        (revision 5443)
+++ gui/schedule_list.cc        (revision 5444)
@@ -490,7 +490,7 @@
        gui_frame_t::zeichnen(pos, gr);

        if(  line.is_bound()  ) {
-               if(  last_schedule_count!=line->get_schedule()->get_count()  ||  last_vehicle_count!=line->count_convoys()  ) {
+               if(  !line->get_schedule()->matches(sp->get_welt(), last_schedule)  ||  last_vehicle_count!=line->count_convoys()  ) {
                        update_lineinfo(line);
                }
                display(pos);
@@ -683,7 +683,7 @@
                // set this schedule as current to show on minimap if possible
                reliefkarte_t::get_karte()->set_current_fpl(new_line->get_schedule(), sp->get_player_nr()); // (*fpl,player_nr)

-               last_schedule_count = new_line->get_schedule()->get_count();
+               last_schedule = new_line->get_schedule();
                last_vehicle_count = new_line->count_convoys();
        }
        else if(  inp_name.is_visible()  ) {
@@ -707,7 +707,7 @@
                // hide schedule on minimap (may not current, but for safe)
                reliefkarte_t::get_karte()->set_current_fpl(NULL, 0); // (*fpl,player_nr)

-               last_schedule_count = -1;
+               last_schedule = NULL;
                last_vehicle_count = 0;
        }
        line = new_line;

Hmm, not clear at first glance where the problem comes from ...
Zitieren
#20
Mhhh ... da kenne ich den Code zu wenig, um Dir zu helfen:o(
Rechtschreibfehler sind gewollt und unterliegen dem Copyright des Verfassers, es sei denn, sie sind expliziet unter die GPL gestellt ....

Für "Simutrans-Nightlys" und aktuelle PAK: http://nightly.simutrans-germany.com
Zitieren


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste