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

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

После установки некоторых приложений я столкнулся с ошибкой segmentation fault (сброс ядра).

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

Например:

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

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

Видеть AU: Что такое ошибка сегментации? сообщение, а также этот пост, в котором есть несколько примеров того, как его воспроизвести, ИТАК: что такое ошибка сегментации?.

Самое простое описание, которое я могу предложить (может быть, не идеальное):

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

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

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

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

  • Отправить сообщение об ошибке

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

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

  • Проявите инициативу для отладки

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

    Это означает, что вы нарушаете уровень абстракции пользователя и открываете черный ящик! (ЗУБНАЯ НИТЬ на самом деле имеет прозрачную коробку).

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

Некоторые... Я имею в виду, что есть много других полезных инструментов, которые вы найдете, когда будете копать глубже.

  1. apport-bug журналы / дамп ядра / обратная трассировка

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

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

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

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

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

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

    Для дистрибутивов на базе Ubuntu (Debian) исходный код пакета можно загрузить с помощью:

    apt-get source <package-name>
  3. strace отслеживание системных вызовов

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

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

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

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

    Источник: man strace

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

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

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

    Источник: man ltrace

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

Хорошая идея :slight_smile: Я спрошу дядю;P

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

См. что такое ошибка сегментации?

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

@Ravan, вы все еще сталкиваетесь с этой проблемой. установите gdb, затем запустите “gdb / opt / google / chrome / chrome”, в gdb введите эту команду “выполнить”, чтобы запустить chrome внутри отладчика. добавьте выходные данные к вашему вопросу. Затем все еще в gdb введите команду backtrack. и опубликуйте его результаты тоже. Я просто хочу подтвердить, что это та же проблема, которую я только что видел, и исправить, понизив рейтинг libnss3. sudo apt-get install libnss3=2:3.15.4-1ubuntu7 libnss3-nssdb=2:3.15.4-1ubuntu7

@Sneetsher спасибо =) Я помню, я решил ошибку. Не могли бы вы, пожалуйста, написать ответ в общем виде, чтобы устранить эту конкретную ошибку. Я имею в виду, независимо от приложения, которое создало эту ошибку, можете ли вы написать общее решение / способ действий?