2017-01-23 12 views
0

Я хочу, чтобы проследить поток, регистрировать все символ его называют, так что я нашел буксировочный методкак использовать lldb след-нить и питона SBThread eBroadcastBitSelectedFrameChanged событие

1, список параметров lldb:

«цели .process.thread ': trace-thread - если true, этот поток будет выполнять одношаговое выполнение и выполнять журнал.

это означает, что lldb будет регистрировать выполнение, но я не могу найти, где находится журнал

2, lldb питон SBThread имеет событие eBroadcastBitSelectedFrameChanged, я думаю, что это будет обратный вызов при смене кадра нити, но почему SBThread имеет нет вещателя?

ответ

0

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

2) eBroadcastBitSelectedFrameChanged отправляется только тогда, когда пользователь изменяет выбранный кадр с помощью команд командной строки. Это означает, что графический интерфейс, такой как Xcode, также позволяет взаимодействовать с командной строкой, чтобы синхронизировать GUI с пользовательскими командами в консоли. Для потоков нет GetBroadcaster, потому что потоки приходят и уходят, и вы обычно хотите слушать ВСЕ потоки, а не только некоторые. Для этого позвоните по номеру SBThread.GetBroadcasterClassName, а затем подпишите свой список для событий по названию класса (StartListeningForEventClass).

Если у вас есть необходимость прослушать конкретную тему, напишите запрос об улучшении на отслеживание ошибок на http://lldb.llvm.org.

+0

большое спасибо. – laikof

+0

Есть ли какой-либо метод, который я могу использовать lldb для сбора команд на уровне рук? например, какие инструкции выполняются или какой символ называется – laikof

+0

. Короткая инструкция-одиночный шаг, lldb не предлагает многого для такого рода исследований. И, кроме того, что вы очень медленны, вам также придется поймать и остановить все новые потоки, чтобы вы могли их также разбить. В зависимости от того, что вы пытаетесь сделать инструментом охвата, например, llvm-cov или что-то в Инструментах, может быть лучше. –