Отладка блокирующих потоков в программе MT?

Каковы возможные способы отладки взаимоблокирующих потоков в программе MT, кроме gdb?


person Nizar Grira    schedule 25.06.2009    source источник


Ответы (4)


На некоторых платформах инструменты обнаружения взаимоблокировок могут помочь обнаружить уже обнаруженные и еще не обнаруженные взаимоблокировки, а также другие ошибки.

В Solaris попробуйте LockLint.
В Linux попробуйте Helgrind или DRD.

person Employed Russian    schedule 05.07.2009
comment
Как и все инструменты Valgrind, Helgrind может быть удивительно полезным инструментом. - person Dan Moulding; 08.07.2009

Если вы используете POSIX, попробуйте проверить PTHREAD_MUTEX_ERRORCHECK.

person Chris Tonkinson    schedule 25.06.2009

Я всегда тратил некоторое время на то, чтобы написать или внедрить гибкое средство ведения журнала в проекты, над которыми я работал, и это всегда хорошо окупалось, превращая сложные ошибки в простые. По крайней мере, обертывание блокирующих примитивов в функции или методы, которые регистрируются до и после регистрации и отображают заблокированный объект и поток, выполняющий блокировку, всегда помогало мне обнулить нарушающий поток за считанные минуты — при условии, что проблема может быть воспроизведена вообще, конечно.

Загрузка программы под отладчиком на самом деле является довольно ограниченным методом определения того, что произошло после взаимоблокировки процесса, поскольку все, что он может дать, — это моментальный снимок того, насколько сильно вы напортачили, а не пошаговое объяснение того, как вы напортачили. который я нахожу намного более полезным.

person Ori Pessach    schedule 25.06.2009

Или получите Intel Thread Checker. Прекрасная работа.

person xcramps    schedule 05.07.2009