Debugging deadlock mit pthread mutex(linux)
ich bin vor ein deadlock in einem meiner c-Anwendung(eine große code -) und ich war in der Lage, die debug-down die Bühne, wo ich druckte einen mutex. Es sieht aus wie unten -
{__data =
{__lock = 2,
__count = 0,
__owner = 15805,
__nusers = 1,
__kind = 0,
__spins = 0,
__list = {__prev = 0x0, __next = 0x0}
},
__size = "\002\000\000\000\000\000\000\000½=\000\000\001", '\0' <repeats 26 times>,
__align = 2
}
Nun konnte ich verstehen, dass __Eigentümer ist die thread-id thread halten dieser mutex gleichen thread endet im deadlock für diesen mutex. Kennt jemand die Bedeutung der restlichen Felder wie _lock,_count,__spins etc was könnte nützlich sein im debugging-deadlocks? Irgendwelche Tipps/tricks wäre auch willkommen? (Basierend auf Debuggen, habe ich verstanden thread versucht zu sperren mutex, die es bereits hält, landet in der Sackgasse und auch andere threads sind eine gute Wahl für diesen mutex)
Ist auch dies möglich, um herauszufinden, bei welcher Zeile der code hat diese verriegelt wurde, wird durch die Beobachtung des Prozesses/threads durch den debugger(gdb) (natürlich mit debug-Infos und code zur hand), ohne dass Sie vorsichtig, code-walkthrough code? Ich gegangen durch meinen code mehrmals, aber war nicht in der Lage zu finden, wo diese Sperre gelassen wurde, unveröffentlicht, vor der Rückgabe aus der Funktion.
Dank
Nerdy
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die anderen Felder sind nicht besonders nützlich für das Debuggen von deadlocks. Die wichtigen Informationen was Sie bereits gefunden - der thread Deadlocks, weil es das sperren eines mutex bereits gesperrt von selbst.
Debuggen mit
gdb
Sie könnten Haltepunkte an jeder Zeile, wo das mutex gesperrt ist, indem der thread von Interesse. Jedes mal, wenn der breakpoint Trigger, nur mit der Ausführung fortfahren. Wenn der deadlock passiert, die letzten vorherigen lock-Vorgang ist offensichtlich eine, die keine entsprechenden entsperren.