Как устранить «Ошибка сегментации (ядро сброшено)»


15

Я использую Ubuntu 14.04.

После установки некоторых приложений я столкнулся с ошибкой сегментации (core dumped).

Что это означает ? Как я могу решить эту проблему?

Например :

После установки chrome-stable при запуске с терминала я вижу эту ошибку.


Произошел сбой некоторой двоичной программы, но это очень специфично для программы, которая вызвала сбой, поэтому вам может потребоваться сообщить нам, какая программа произвела это, также вы можете попытаться обновить ее.
Kwaadpepper


1
Поскольку это закрытый источник, вам лучше сообщить об ошибке дяде GooGle!
user.dz

1
Хорошо SH :) Я спрошу дядя; P
Раван

1
Попробуйте удалить его настройки и кеш sudo rm -rf ~/.config/google-chrome ~/.cache/google-chrome. Затем запустите его в режиме инкогнитоgoogle-chrome --incognito
user.dz

Ответы:


12

Что это означает?

См. AU: Что такое ошибка сегментации? а также это, которые имеют несколько примеров, как воспроизвести это, SO: Что такое ошибка сегментации? , самое простое описание, которое я могу привести (может быть, не идеальное):

Программа пыталась получить доступ к области памяти вне своего собственного раздела. ОС блокирует это.

В некоторых случаях: чтение значения с инициализированным указателем, выход за пределы диапазона в массиве, вызов функции (если обратная совместимость не поддерживается), ...

Однако не всегда легко найти причину с помощью больших программ или программ, которые работают с другими библиотеками проекта. И в большинстве случаев выдается отчет об ошибке либо для целевой программы, либо в случае ее зависимостей (либо в исходном проекте, либо в последующем дистрибутивном пакете).

Как я могу решить эту проблему?

Если вы не сделали никакой пользовательской конфигурации / настройки и все обновления установлены. Запустить отчет об ошибке , см. Как мне сообщить об ошибке?

Если открытый исходный код поддерживается Ubuntu, используйте ubuntu-bug( apport-bug). Для сторонних закрытых источников, проверьте их справочные страницы, как сообщать об ошибках и собирать связанные данные.


Примечание. Если у вас есть небольшой опыт программирования, рекомендуется постараться решить его самостоятельно. Там много сообщений об ошибках там неактивных в течение многих лет. Или, по крайней мере, соберите достаточно отладочных данных, чтобы решить проблему, прежде чем сообщать об этом.

Некоторые полезные инструменты для отладки

  1. apport-bug logs / core dump / backtrace

    Если у вас нет сообщения об ошибке до ошибки сегментации. Запустите его с --saveопцией и найдите журнал обратной трассировки:

    apport-bug program-cmd --save bug-report_output.txt
    
  2. gdb возврат / отладка исходного кода

    Если это не сработало, используйте gdb:

    $ gdb program-cmd
    (gdb) run
    (gdb) backtrace
    

    Если вы получили какое-либо сообщение об ошибке, проверьте веб-страницу, панель запуска и трекер ошибок в исходном проекте, если есть подобные случаи.

    Для некоторых опытных пользователей или тех, кто идет по пути обучения ac / c ++, они могут загрузить соответствующие -dbgпакеты символов. Затем вы можете использовать gdbдля отслеживания потока программы через источник и получить точную функцию / инструкцию, которая вызывает ошибку во время выполнения.

  3. strace отслеживание системных вызовов

    Еще один инструмент, который может помочь strace, мне это нравится. Это действительно мощный инструмент.

    Он представляет себя:

    В простейшем случае straceзапускает указанную команду до ее выхода. Он перехватывает и записывает системные вызовы, вызываемые процессом, и сигналы, принимаемые процессом. Имя каждого системного вызова, его аргументы и возвращаемое значение выводятся при стандартной ошибке или в файл, указанный с помощью опции -o.

    straceявляется полезным диагностическим, учебным и отладочным инструментом. Системные администраторы, диагносты и специалисты по устранению неисправностей найдут его незаменимым для решения проблем с программами, для которых источник недоступен, поскольку их не нужно перекомпилировать для отслеживания. Студенты, хакеры и чрезмерно любопытные обнаружат, что многое можно узнать о системе и ее системных вызовах, отслеживая даже обычные программы. И программисты обнаружат, что, поскольку системные вызовы и сигналы являются событиями, которые происходят в интерфейсе пользователя / ядра, тщательное изучение этой границы очень полезно для изоляции ошибок, проверки работоспособности и попыток захвата условий гонки.

    Источник: man strace

  4. ltrace динамическое отслеживание вызовов библиотеки

    ltraceэто программа, которая просто запускает указанную команду до ее выхода. Он перехватывает и записывает динамические библиотечные вызовы, которые вызываются исполняемым процессом, и сигналы, полученные этим процессом. Он также может перехватывать и распечатывать системные вызовы, выполняемые программой.

    Его использование очень похоже на strace(1).

    Источник: man ltrace

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.