Удаленная отладка многопоточной C-программы с GDB

Я использую Eclipse для разработки и удаленной отладки программного обеспечения для процессора ARM. К сожалению, программное обеспечение, которое я пишу, является многопоточным, и я не могу его отладить. Если я ставлю точку останова в коде потока, я получаю следующее сообщение:

Child terminated with signal = 5

Child terminated with signal = 0x5

GDBserver exiting

Сделав довольно много Googling, я нашел "решение", которое предложило использовать это:

strip --strip-debug libpthread.so.0

К сожалению, я все еще получаю ошибки завершения.

Я был бы очень признателен за помощь в выяснении этого!

Спасибо!

1 ответ

Во-первых, эта (и последующая) ошибка (и):

cc1.exe: error: unrecognized command line option "-fstrip-debug"

вызвано добавлением strip --strip-debug и т.д. в командной строке GCC. Это очевидно поддельная вещь, а вовсе не то, что предложила ваша поисковая система. (Возможно, вы захотите очистить свой вопрос, чтобы удалить ссылки на эти ошибки; они не имеют никакого отношения к вашей проблеме.)

То, что он сделал (или должен был) предложить, использует strip --strip-debug libpthread.so.0 вместо использования strip libpthread.so.0,

Это потому, что GDB не может работать с потоками, если ваш libpthread.so.0 полностью удален.

Это может быть лишено отладочных символов (что к чему strip --strip-debug libpthread.so.0 делает), но лишив его всех символов (вот что strip libpthread.so.0 делает) плохая идея (ТМ).

Так как вы (по-видимому) не сами строите libpthread.so.0Вам также не нужно раздевать это.

Однако вы должны убедиться, что поставщик вашей цепочки инструментов не облажался. Следующая команда не должна сообщать no symbolsи должен фактически напечатать соответствующий nptl_version (как определенный символ):

nm /path/to/target/libpthread.so.0 | grep nptl_version

Предполагая, что все хорошо, теперь мы можем диагностировать вашу проблему, кроме... вы не предоставили достаточную информацию;-(В частности, когда вы запускаете GDB, он должен напечатать что-то вроде using /path/to/libthread_db.so.0, Возможно, вам придется искать консоль GDB в Eclipse, или вы можете запустить GDB из командной строки, чтобы вы точно видели, что она печатает.

Крайне важно, чтобы версия libthread_db.so.0 (для хоста) соответствует версии lipthread.so.0 (для цели). Они оба должны быть предоставлены вашим поставщиком инструментов.

Ваша проблема, скорее всего, что либо GDB не может найти libthread_db.so.0 или что он находит не тот.

Другие вопросы по тегам