LINUX.ORG.RU

Отладка многопоточных приложений


0

0

Здравствуйте уважаемые.

Отлаживал subj преимущественно с помощью printf и аналоги (запись в файл с O_SYNC). Когда совсем замучили seg fault'ы стал использовать gdb и корку. Выяснил что корка создается только из треда в котором происходит падение, по этому если ее подключить то стек оказывается не полным и очень часто запорченным. Можно ли как-нибудь побороть данную проблемму?

И вообще посоветуйте еще какие-нибудь способы отладки.

anonymous

Хмм ... а версия gdb какая ?

PS: Я юзаю gdb в ddd обертке (причем и то и другое далеко не самое последнее) и никаких проблем с обработкой сегфолтов в малитреде там не возникает ...

Навскидку -а если вставить обработчик свой SIGSEGV  ? 

sS ★★★★★
()

как мне подсказывает опыт, большинство проблем с потоками возникает из-за "шаренных" ресурсов (адресое пространство-то одно => одна переменная в однлм потоке например алокируется и одновременно в друго делокируется, а в первом о делокации не известно). Я борюсь с такой байдой так: прежде всего на бумажке нарисуй как что должно работать (а-ля sequence diagram) => найдешь места возможных проблем, тогда "закрой" эти места с помощью критических секций (мьютексами). От первых граблей помогает. Потом есть такая штука Code Forge - платная IDE. В ней есть свой отладчик, который показывает список потоков и их состояния (и если исполнение не в системных либах, а в бинариках с дебуг-инфой, то можно переключится между потоками и посмотреть стеки вызовов для каждого потока). Это не реклама! Это один из самых удобных дебугеров. Ну если и это не помогает, на крайняк (я до этого не доходил) (сам никогда этого не видел) есть thread-safe версии системных либ (для тех же malloc/free). Я пользую STL - там один из параметров для конструктора - тип memory management. Ну больше я не знаю...

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.