GDB показывает неверный поток в посмертном анализе

Я испытываю странное поведение GDB. При выполнении посмертного анализа ядра, выгруженного из сильно многопоточного приложения на C++, команды отладчика

bt
where
thread info

так и не подскажите какая нить программа на самом деле слетела. Он продолжает показывать мне поток номер 1. Поскольку я привык видеть, что это работает из других систем, мне любопытно, является ли это ошибкой в ​​​​GDB или они каким-то образом изменили поведение. Может ли кто-нибудь указать мне на решение этого, это PITA для поиска по 75 потокам, просто чтобы узнать что-то, что уже знает отладчик.

Кстати, я на Debian Squeeze (6.0.1), версия GDB 7.0.1-debian, Система x86 и полностью 32-битная. В моей старой установке Debian (5.x) отладка ядра, созданного из того же источника, дает мне обратную трассировку правильного потока, как и GDB в установке Ubuntu 10.04.

Спасибо!


person user761451    schedule 19.05.2011    source источник
comment
Когда GDB инициализирует и читает файл ядра, он не дает сводку о завершении? Обычно это включает сводку активного потока.   -  person wallyk    schedule 19.05.2011
comment
Загрузив его сегодня, я перекомпилировал свой исходный код и снова дал ему сбой. GDB теперь работает как шарм. Теперь я еще больше запутался... но все равно спасибо за помощь.   -  person user761451    schedule 20.05.2011


Ответы (1)


GDB не знает, какой поток вызвал сбой, и просто показывает первый поток, который он видит в core.

Ядро Linux обычно сначала выгружает сбойный поток, и поэтому в большинстве систем вы оказываетесь именно в правильном потоке после загрузки core в GDB.

Я никогда не видел ядра, в котором это было бы сломано, но я никогда не использовал Debian 6.

Я предполагаю, что это было сломано, а затем было исправлено, и Debian 6 поставлялся со сломанным ядром.

Вы можете попробовать обновить ядро ​​​​на вашем компьютере с Debian 6, чтобы оно соответствовало, например. ваш Ubuntu 10.04 и посмотрите, исчезнет ли проблема.

Кроме того, coredumper пользовательского пространства Google делает это правильно. Вы можете связать его и вызвать из обработчика SIGSEGV.

person Employed Russian    schedule 20.05.2011
comment
Он снова работает. До сих пор не понимаю, что накосячили. В любом случае, ваш ответ поучительный, и кажется, что coredumper пользовательского пространства Google заслуживает более пристального внимания. Спасибо. - person user761451; 20.05.2011