Каковы основные причины прерывания сигнала? - PullRequest
5 голосов
/ 20 апреля 2011

У меня есть приложение на C ++ поверх Linux, которое при выходе получает сигнал прерывания.Прежде чем я пойду за кодом, чтобы выследить проблему, мне нужно знать, в каких случаях я получу сигнал прерывания от ядра.Это может дать мне правильное направление для отладки.

Пожалуйста, укажите каждый потенциальный сценарий, в котором приложение может получить сигнал сброса.*

процесс находится в режиме выхода, то есть процедура exit () вызывается для постепенного завершения процесса. , следовательно, все деструкторы глобального объекта вызываются.*

Ответы [ 3 ]

3 голосов
/ 20 апреля 2011
  • Скомпилируйте его с помощью -g
  • Запустите его из отладчика

При сбое приложения отладчик выдаст вам строку, которая позволит вам проверить поток, переменные...

Другое решение:

  • изменить генерацию дампа ядра с помощью ulimit
  • загрузить дамп ядра в gdb после смерти

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

0 голосов
/ 06 ноября 2013

Причиной прерывания обычно является ошибка подтверждения

например

(gdb) bt
#0  0x00000035fbc30265 in raise () from /lib64/libc.so.6
#1  0x00000035fbc31d10 in abort () from /lib64/libc.so.6
#2  0x00000035fbc296e6 in __assert_fail () from /lib64/libc.so.6
0 голосов
/ 20 апреля 2011

Я бы попробовал работать под valgrind .Может быть ошибка памяти даже до того, как прерывание и валгринд заметят это и скажут вам.Если это так, вы найдете ошибку гораздо проще, чем с обычным отладчиком, таким как gdb.

...