2016-08-04 39 views
2

Ich habe ein System, in dem 5 Threads parallel laufen. Ich habe einen Haltepunkt gesetzt.gdb single stepping einen einzigen Thread mit All-Stop-Modus

Im gdb All-Stop-Modus sind alle Threads nach dem Erreichen eines Breakpoints an diesem Breakpoint gestoppt (ich sehe derzeit, dass Thread 2 den Breakpoint-Treffer verursacht hat). Jetzt möchte ich nur Thread 4 laufen lassen, wenn ich weiter drücke und alle anderen Threads weiterhin gestoppt bleiben. I.e. Ich möchte mit Thread 4 Schritt, um sicherzustellen, dass alle anderen Threads gestoppt bleiben.

Können Sie vorschlagen, wie kann ich das tun.

Antwort

0

Von der GDB Dokumentation: https://sourceware.org/gdb/onlinedocs/gdb/All_002dStop-Mode.html

Auf einigen Betriebssystemen können Sie gdb Standardverhalten ändern, indem Sie die OS-Scheduler Verriegelung nur ein einzelner Thread ausgeführt zu ermöglichen.

Satz Scheduler-Verriegelungsmodus

den Modus Scheduler Verriegelung ein. Dies gilt für die normale Ausführung, den Aufnahmemodus und den Wiedergabemodus. Wenn es ausgeschaltet ist, gibt es keine Sperre und jeder Thread kann zu jeder Zeit ausgeführt werden. Wenn diese Option aktiviert ist, kann nur der aktuelle Thread ausgeführt werden, wenn der Untergeordnete wieder aktiv ist. Der Schrittmodus optimiert für Single-Stepping; Es verhindert, dass andere Threads den aktuellen Thread während des Schritts vorwegnehmen, sodass sich der Fokus des Debugging nicht unerwartet ändert. Andere Threads erhalten nie eine Chance, ausgeführt zu werden, wenn Sie einen Schritt ausführen, und sie können vollständig ausgeführt werden, wenn Sie Befehle wie "Fortfahren", "Bis" oder "Beenden" verwenden. Wenn jedoch kein anderer Thread während seiner Zeitleiste einen Haltepunkt erreicht, ändert gdb den aktuellen Thread nicht von dem Thread, den Sie gerade debuggen. Der Wiedergabemodus verhält sich im Aufzeichnungsmodus wie aus und im Wiedergabemodus wie im Wiedergabemodus.