Отладка тупиковых потоков в программе MT? - PullRequest
2 голосов
/ 25 июня 2009

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

Ответы [ 4 ]

2 голосов
/ 05 июля 2009

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

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

0 голосов
/ 05 июля 2009

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

0 голосов
/ 25 июня 2009

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

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

0 голосов
/ 25 июня 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...