Я использовал CruiseControl с XCode (similiar, к какой Прагматическая предложенная Автоматизация), и имели разумный успех. Я также очень знаком с CruiseControl, и это - относительно ужасающая установка формата конфигурации.
я также использовал BuildBot успешно, но нашел, что это - преимущества, действительно не соответствовал моим потребностям (распределенное ведомое здание и создание отчетов через несколько различных систем). Конфигурирование buildbot установки может быть искусством в и себя, хотя это не трудно. Это все по существу пишет сценарии в Python.
, Так как Гудзон стал доступным, я рекомендовал бы его как путь для выполнения непрерывной интеграции. Это имеет веб-интерфейс (основной дефицит CruiseControl в моем уме) и очень гибко в различных системах, которые это поддерживает. Можно вызвать командную строку управляемые сборки довольно легко и очень очевидно. Однако я не настроил экземпляр с помощью Гудзона и XCode, где я имею для других систем, таким образом, это - частично предположение с моей стороны.
Попробуйте следующее:
(gdb) b __pthread_create_2_1
Или создайте свой собственный GDB
с этим патчем .
Или попробуйте последний предварительный выпуск ] GDB
здесь , что должно позволить вам выполнить «поймать клон системного вызова»
Хорошо, на случай, если я вас не понял или мой первый ответ не помог, сделайте следующее:
(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.
Хорошо, я отправлю два ответа, потому что не уверен, что понимаю ваш вопрос.
Во-первых: pthread_create находится в разделяемой библиотеке, и gdb знает, как справиться с этим. Если вы просто скажете «break pthread_create», он должен «просто сработать».
Вам не нужно этого знать, но он должен работать следующим образом: gdb найдет символ " pthread_create @ plt ", который является заглушкой, ведущей к динамический загрузчик, и в конечном итоге он будет заменен переходом на соответствующая функция общей библиотеки. Мы установим там точку останова, и gdb будет автоматически обрабатывать динамический загрузчик, пока в конечном итоге достижение (и остановка) правильной функции разделяемой библиотеки.
Теперь, если это не решит эту проблему за вас, перейдем к моему второму ответу ...