gdb устанавливают контрольные точки на pthread_create

Я использовал CruiseControl с XCode (similiar, к какой Прагматическая предложенная Автоматизация), и имели разумный успех. Я также очень знаком с CruiseControl, и это - относительно ужасающая установка формата конфигурации.

я также использовал BuildBot успешно, но нашел, что это - преимущества, действительно не соответствовал моим потребностям (распределенное ведомое здание и создание отчетов через несколько различных систем). Конфигурирование buildbot установки может быть искусством в и себя, хотя это не трудно. Это все по существу пишет сценарии в Python.

, Так как Гудзон стал доступным, я рекомендовал бы его как путь для выполнения непрерывной интеграции. Это имеет веб-интерфейс (основной дефицит CruiseControl в моем уме) и очень гибко в различных системах, которые это поддерживает. Можно вызвать командную строку управляемые сборки довольно легко и очень очевидно. Однако я не настроил экземпляр с помощью Гудзона и XCode, где я имею для других систем, таким образом, это - частично предположение с моей стороны.

15
задан unwind 18 September 2009 в 14:18
поделиться

3 ответа

Попробуйте следующее:

(gdb) b __pthread_create_2_1

Или создайте свой собственный GDB с этим патчем .

Или попробуйте последний предварительный выпуск ] GDB здесь , что должно позволить вам выполнить «поймать клон системного вызова»

16
ответ дан 1 December 2019 в 01:38
поделиться

Хорошо, на случай, если я вас не понял или мой первый ответ не помог, сделайте следующее:

(gdb) info func pthread_create
All functions matching regular expression "pthread_create":

Non-debugging symbols:
0x080485e0  pthread_create
0x080485e0  pthread_create@plt
0x00786590  __pthread_create_2_1
0x00786590  pthread_create@@GLIBC_2.1
0x00786ee0  __pthread_create_2_0
0x00786ee0  pthread_create@GLIBC_2.0

Теперь выберите символ, который вы считаете правильным, и установите там точку останова. Не выбирайте те, в которых есть "@", а выбирайте те, в которых есть цифры. и подчеркивания, например 1__pthread_create_2_1.

16
ответ дан 1 December 2019 в 01:38
поделиться

Хорошо, я отправлю два ответа, потому что не уверен, что понимаю ваш вопрос.

Во-первых: pthread_create находится в разделяемой библиотеке, и gdb знает, как справиться с этим. Если вы просто скажете «break pthread_create», он должен «просто сработать».

Вам не нужно этого знать, но он должен работать следующим образом: gdb найдет символ " pthread_create @ plt ", который является заглушкой, ведущей к динамический загрузчик, и в конечном итоге он будет заменен переходом на соответствующая функция общей библиотеки. Мы установим там точку останова, и gdb будет автоматически обрабатывать динамический загрузчик, пока в конечном итоге достижение (и остановка) правильной функции разделяемой библиотеки.

Теперь, если это не решит эту проблему за вас, перейдем к моему второму ответу ...

2
ответ дан 1 December 2019 в 01:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: