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


von Johannes (Gast)


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?
1
...
2
    tid = get_taskID();
3
4
    taskDataHead = getTaskDataHead();
5
    taskData = getTaskFromThreadId(tid, taskDataHead);
6
7
    if(taskData != NULL)
8
    {
9
        sem_wait(&taskData->sem_elements.full);
10
        sem_wait(&taskData->sem_elements.lock);
11
12
        size_t triggeredByMailbox = isTaskTriggeredByMailbox(taskData);
13
...

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
1
        sem_init(&newNode->sem_elements.lock, 0, 1);
2
        sem_init(&newNode->sem_elements.full, 0, 0);

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

von auweia (Gast)


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)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.