GDB показывает неправильный поток в посмертном анализе - PullRequest
4 голосов
/ 19 мая 2011

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

bt
where
thread info

никогда не сообщают мне поток, в котором программа фактически потерпела крах.Он продолжает показывать мне номер потока 1. Поскольку я привык видеть, как это работает в других системах, мне любопытно, является ли это ошибкой в ​​GDB или они как-то изменили поведение.Может кто-нибудь указать мне на решение этой проблемы, это PITA для поиска по 75 потокам, просто чтобы узнать что-то, что отладчик уже знает.версия GDB - 7.0.1-debian, система - x86 и полностью 32-разрядная.В моей более старой установке Debian (5.x) отладка ядра, выгруженного из того же источника, возвращает мне правильную нить, как это делает GDB в установке Ubuntu 10.04.*

1 Ответ

4 голосов
/ 20 мая 2011

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

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

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

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

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

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

...