Дамп ядра не синхронизирован с трассировкой стека GDB

StackOverflow https://stackoverflow.com/questions/3650812

  •  01-10-2019
  •  | 
  •  

Вопрос

У меня есть программа, которая выходит из строя из-за ошибки сегментации.Создается основной файл.

запуск ядра в GDB дает мне следующее:

HP gdb 6.1 для HP Itanium (32- или 64-разрядная версия) и целевые HP-UX 11iv2 и 11iv3.

Ядро было создано gcpf1fwcApp.
Программа завершена сигналом 6: Прервано.

Я использовал команду

тред применить все BT

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

Однако, когда я запускаю ту же программу в GDB, я получаю совершенно другую ошибку в трассировке стека.Это кажется более правильным, чем дамп ядра.

Программа имеет 31 поток.

Почему я получаю такую ​​разницу?

Это было полезно?

Решение

Возможно, вы просто ищете не ту ветку.

Пытаться thread apply all where, и посмотрите, действительно ли один из потоков abort()инж.

При отладке живого процесса GDB остановится, когда поток получит SIGABRT, и поэтому, скорее всего, покажет вам соответствующую тему.

При отладке ядра (посмертная) GDB не знает, какой поток имеет значение, и поэтому показывает их вам в том порядке, в котором ОС сохранила их в ядре.Ядра Linux сохраняют поток, который первым вызвал завершение процесса, поэтому GDB в Linux показывает соответствующий поток из ядра.Я предполагаю, что HP-UX этого не делает, и вместо этого GDB показывает вам «случайный» поток.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top