Forum: PC-Programmierung Googletest stürzt immer ab nach sem_wait


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Johannes (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Guten morgen,
wir habne ein Programm in einer VM (Debian) geschrieben. Dieses testen 
wir jetzt mit googletest. Hierbei stürzt es aber immer ab. Beim Crash 
springt der Debugger zu
0x7ffff6fb2fff    48 81 c4 88 00 00 00           add    $0x88,%rsp

was genau bedeutet denn $0x88 und %rsp?
...
    tid = get_taskID();

    taskDataHead = getTaskDataHead();
    taskData = getTaskFromThreadId(tid, taskDataHead);

    if(taskData != NULL)
    {
        sem_wait(&taskData->sem_elements.full);
        sem_wait(&taskData->sem_elements.lock);

        size_t triggeredByMailbox = isTaskTriggeredByMailbox(taskData);
...


es stürzt immer nach dem zweite Aufruf von sem_wait ab.
Auch wenn ich danach nochmal tid=get_taskID() aufrufen würde, würde es 
dort abstürzen.

Die Semaphoren arbeiten an für sich im normalen ablauf (zumindest ist es 
dort noch nie gecrasht). Außer jetzt bei den google-Tests.
Es gab bei der Initialisierung natürlich auch
        sem_init(&newNode->sem_elements.lock, 0, 1);
        sem_init(&newNode->sem_elements.full, 0, 0);

Woran könnte das liegen? Kommt google nicht mit semaphoren klar?

von auweia (Gast)


Bewertung
0 lesenswert
nicht lesenswert
> was genau bedeutet denn $0x88 und %rsp?

"Addiere 0x88 zum Stackpointer"

Wenn der Stackpointer bei Benutzung normalerweise dekrementiert wird,
entspricht das etwa dem "Aufraeumen" eines Stackframes beim
Verlassen einer Funktion.

von DPA (Gast)


Bewertung
0 lesenswert
nicht lesenswert
In solchen fällen lasse ich immer zuerst mal valgrind und asan drüber 
laufen (aber nicht beide zusammen, die vertragen sich nicht). Wenn man 
glück hat, und da irgend was überschrieben wurde, finden die dann 
manchmal die eigentliche Problemstelle. Kompiliere es auch mal mit 
-fstack-protector-all eingeschalten.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.