Как интерпретировать linux строку ошибки ядра? - PullRequest
0 голосов
/ 18 февраля 2020

У меня есть приложение для сокетов, написанное на C ++, которое работает на Linux. Он вылетел этим утром, и когда я проверяю / var / log / messages, я вижу следующую строку во время создания cra sh:

kernel: traps: LogProcessor[9364] general protection ip:4f2555 sp:7fbd529b1670 error:0 in MyPrg[400000+21a000]

Я хочу покопаться в коде и найти причину но я не знаю, как интерпретировать значения в строке ошибки.
Означает ли это, что ошибка вызвана LogProcessor? Какие значения «ip», «sp», «error: 0», MyPrg [400000 + 21a000]?

Ответы [ 2 ]

0 голосов
/ 18 февраля 2020

Это Общая ошибка защиты . Есть несколько причин, которые могут вызвать это. Вы можете прочитать больше в вышеупомянутой ссылке.

  • LogProcessor[9364] - имя потока и pid
  • ip:4f2555 - указатель инструкции (выглядит здесь подозрительно)
  • sp:7fbd529b1670 - указатель стека
  • error:0 - код ошибки (почему 0?)
  • MyPrg[400000+21a000] - имя программы
0 голосов
/ 18 февраля 2020

Наиболее значимой информацией является указатель инструкций (IP). Вы можете проверить свой двоичный файл с помощью инструментов GNU и проверить, что произошло. Например, с помощью addr2line

addr2line -e <your binary> 0x4f2555 

Если ваше приложение было создано с использованием символов отладки (-g) и если в вашем коде произошла ошибка (не в библиотеке), вывод должен показать вам проблему.

SP является указателем стека во время крэ sh. MyPrg [400000 + 21a000] сообщает вам виртуальный адрес двоичного файла.

ошибка: 0 означает деление на ноль (если ваше приложение работает на архитектуре x86): https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/arch/x86/include/asm/traps.h#n148

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