Быстрый способ найти, какой поток утвержден в GDB? - PullRequest
1 голос
/ 30 октября 2009

Когда мое приложение Cocoa обнаруживает утверждение в коде, gdb выдает мне сообщение, как и ожидалось, но оно никогда (да, редко) в нужном потоке.

Я знаю, что могу использовать отладчик графического интерфейса Xcode, и это делает его немного менее болезненным, но я думаю, что должен быть трюк с командной строкой GDB, которого я не знаю.

Есть ли более простой способ найти утвержденный поток, кроме перехода на каждый поток и выдачи where?

Ответы [ 2 ]

3 голосов
/ 12 марта 2011

Николай предложил «нить применить все бт». Также есть «информационные потоки», которые иногда могут помочь вам найти то, что вам нужно, с меньшим количеством слов.

Предположим, что 'информационные потоки' не показывают, что вы хотите, и вы вынуждены прочесывать трассировки стека для всех потоков. Это может быть болезненно, если в вашем процессе много потоков (в некоторых программах это может быть сотни). Вы можете ограничить число отображаемых кадров на поток чем-то более подходящим (скажем, 5 кадров)

(gdb) thread apply all where 5

Но даже это может быть трудно прочесать, поскольку вам, возможно, придется нажимать на пейджерную подсказку в поисках того, что вы хотите, и вы можете легко пропустить вашу цель. Когда это так, я нашел комбинацию включения регистрации и нанесения вреда на пейджер очень полезной

(gdb) set height 10000
(gdb) set logging on
(gdb) thread apply all where 5
(gdb) shell

Теперь изучите gdb.txt и найдите вашу ветку.

1 голос
/ 30 октября 2009

(gdb) thread apply all bt

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...