Was soll ich denn jetzt tun?



  • Vielleicht auch nicht-initialisierte Variablen?


  • Mod

    Tim06TR schrieb:

    bei dem das Programm sich "still" verabschiedet.

    Beschreib das mal genauer.

    Aber das wäre ja kein Problem, wenn das Programm nicht vollkommen normal verlaufen würde, wenn der Debugger dran hängt. Welcher Fehler macht denn sowas?

    Könnte allgemein undefiniertes Verhalten sein. Ist aber ungewöhnlich, dass es im Debugger nicht nachvollziehbar ist.

    Ist das Programm parallelisiert? Dann wäre meine Wette auf eine Race Condition. Da hast du dann nämlich unterschiedliches Zeitverhalten mit Debugger und ohne, was die Beobachtung perfekt erklärt.

    Versteckt sich vor dem Debugger!
    Wie soll ich das denn jetzt finden?

    Kommt drauf an, was genau '"still" verabschiedet' bedeutet. Allgemeine Ideen: valgrind, core dump, mit dem Debugger an den laufenden Prozess anhängen.



  • Schonmal valgrind probiert?
    Du verwendest wahrscheinlich viele rohe Pointer, da passieren leicht Fehler und UB. Mit Valgrind machst du recht schnell den Fehler ausfindig.



  • Ja ist schon ein wenig was.
    Ich hantiere extrem viel mit Iteratoren herum, denn ich benutze einen Cursor der durch das Programm hüpft, das geben ich auch an Lambdas und andere Funktionen weiter.
    Ich schau mal ob ich es reduzieren kann. Normalerweise brauche ich nie mehr als 50 Zeilen posten, aber da wird schwierig.
    Schreib gleich nochmal...



  • Tim06TR schrieb:

    Ich hantiere extrem viel mit Iteratoren herum

    Dann: -D_GLIBCXX_DEBUG



  • pointee schrieb:

    Tim06TR schrieb:

    Ich hantiere extrem viel mit Iteratoren herum

    Dann: -D_GLIBCXX_DEBUG

    Ah vielen Dank für den Tipp. Jetzt bekomme ich zumindest einen vernünftigen Hinweis.

    Kopie aus Console:

    Enter number: 6
    77
    d:\mingw\include\c++\4.8.0\bits\basic_string.h:828: std::basic_string<_CharT, _T
    raits, _Alloc>::const_reference std::basic_string<_CharT, _Traits, _Alloc>::oper
    ator[](std::basic_string<_CharT, _Traits, _Alloc>::size_type) const [with _CharT
    = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::b
    asic_string<_CharT, _Traits, _Alloc>::const_reference = const char&; std::basic_
    string<_CharT, _Traits, _Alloc>::size_type = unsigned int]: Assertion '__pos <=
    size()' failed.

    This application has requested the Runtime to terminate it in an unusual way.
    Please contact the application's support team for more information.

    Process returned 3 (0x3) execution time : 1.047 s
    Press any key to continue.

    ahmm...



  • std::string blub;

    blub[12] = 'x';



  • Tim06TR schrieb:

    ahmm...

    Jetzt kannst du mit gdb anrücken, der fängt die Assertion ab und du kannst einen schönen Backtrace erstellen.



  • Ich habe den Fehler jetzt auf eine Funktion festgenagelt.

    EDIT: Ich schreib sie neu. Dann optimier ich die gleich...



  • Tim06TR schrieb:

    Ich habe den Fehler jetzt auf eine Funktion festgenagelt.

    EDIT: Ich schreib sie neu. Dann optimier ich die gleich...

    Was is der Fehler nu?



  • Habe mich vertan. Das war es doch nicht.
    Ich lande komischerweise nun bei meinem Matheparser.

    Es kann doch auch nicht normal sein, dass wenn ich nen string auf die Watchlist setze, dass der mich plötzlich in "std::string::size()" wirft?

    EDIT: + Der Debugger und das Programm verabschieden sich ohne ein mucks zu machen sobald wenn ich über die Stelle springen will.

    [Inferior 1 (process 4380) exited with code 03]
    Debugger finished with status 0


  • Mod

    Tim06TR schrieb:

    Habe mich vertan. Das war es doch nicht.
    Ich lande komischerweise nun bei meinem Matheparser.

    Es kann doch auch nicht normal sein, dass wenn ich nen string auf die Watchlist setze, dass der mich plötzlich in "std::string::size()" wirft?

    Ist das ein Frage oder eine Feststellung? und für wen?



  • Hast du Lust den Quellcode hochzuladen, würde mich gerade mal interessieren.



  • Sekunde dann kopiere ich das kurz richtig zusammen.



  • 1. Ich habe mir nicht übermäßig viel Zeit genommen das Programm sauber zu strukturieren, außer in manchen einzelnen Sourcedateien, die ziemlich sauber sind.
    Im ScriptInterpreter code ist auch ein bisschen was an code redundanz in den Funktionen.

    Die Scriptdatei habe ich in den Ordner gelegt. Zum Testen hatte ich den festen Pfad in der Main angegeben.
    http://81.169.156.131:81/TEMPORARY/Code.zip
    Ich habs mit Codeblocks geschrieben.

    Falls ich was vergessen haben sollte, dann ergänze ich es sofort.

    EDIT: Den Matheparser habe ich eigentlich auch von oben bis unten auf Herz und Nieren getestet. Der läuft, wenn allein gestartet auch ganz problemlos.


  • Mod

    Minimalbeispiel! Portabel!

    So guckt sich das doch niemand an.



  • Ich habe doch keine Ahnung, wo ich suchen muss.
    Normalerweise kann ich alle Probleme sofort lösen. Aber ich kann nicht sonderlich gut debuggen, wenn er nicht an die Problemstelle springt, sondern bye bye sagt.

    EDIT: Und out hatte danach gefragt also hab ich es kurz geuppt.
    Ich such weiter.



  • Hui 386 Fehler bekomm ich grad, mal schauen:D



  • Erkenntnis: Skripvariablen dürfen keine einstellige Namen haben. Das komische ist nur, dass der Mathe Parser alleine keine Fehler produziert (Wenn ich ihn in einem eigenen Programm teste). Allerdings im Script Parser eingebaut geht irgendwas schief, obwohl es der selbe Code ist. Wahrscheinlich stellt sich nachdem ich das hier abgeschickt hab raus, dass ich wieder mal in irgendeiner Zeile was verzwuckelt habe, was "zufällig" funktioniert.

    Tut mir leid, dass ich diesen wirklich informationslosen Thread aufgemacht habe. Aber das mit dem Debugger hat mich doch ein wenig aufgeregt... (und tut es immernoch, denn mit dem gdb komme ich auf keinen grünen Zweig, das Einzige was ich damit "normal" kann ist Haltepunkte benutzen und normalerweise auch in den Call Stack gucken wenn was schief geht).

    Ich muss mein OS updaten und wieder zu Microsofts IDE wechseln...

    EDIT: Ich stelle den MatheParser jetzt auch auf iteratoren um, das war überfällig



  • Ok ich habe aber doch noch ein Frage:
    EDIT: ohne debugger ist das anstrengend, aber ich habe es gefunden.

    Vor der folgenden Zeile wurde nicht geprüft, ob Characters.length() größer als (j+start) ist.

    still_true &= (OperatorSet[i].oc[j] == Characters[j+start]);
    

    Das hätte aber vorher schon schief gehen müssen. Es sei denn es war im vorher egal über den Rand heraus zu lesen.


Anmelden zum Antworten