Не всегда программы в Linux запускаются как положено. Иногда, в силу разных причин программа вместо нормальной работы выдает ошибку. Но нам не нужна ошибка, нам нужна программа, вернее, та функция, которую она должна выполнять. Сегодня мы поговорим об одной из самых серьезных и непонятных ошибок. Это ошибка сегментации Ubuntu. Если такая ошибка происходит только один раз, то на нее можно не обращать внимания, но если это регулярное явление нужно что-то делать.
Конечно, случается эта проблема не только в Ubuntu, а во всех Linux дистрибутивах, поэтому наша инструкция будет актуальна для них тоже. Но сосредоточимся мы в основном на Ubuntu. Рассмотрим что такое ошибка сегментирования linux, почему она возникает, а также как с этим бороться и что делать.
Что такое ошибка сегментации?
Ошибка сегментации, Segmentation fault, или Segfault, или SIGSEGV в Ubuntu и других Unix подобных дистрибутивах, означает ошибку работы с памятью. Когда вы получаете эту ошибку, это значит, что срабатывает системный механизм защиты памяти, потому что программа попыталась получить доступ или записать данные в ту часть памяти, к которой у нее нет прав обращаться.
Чтобы понять почему так происходит, давайте рассмотрим как устроена работа с памятью в Linux, я попытаюсь все упростить, но приблизительно так оно и работает.
Допустим, в вашей системе есть 6 Гигабайт оперативной памяти, каждой программе нужно выделить определенную область, куда будет записана она сама, ее данные и новые данные, которые она будет создавать. Чтобы дать возможность каждой из запущенных программ использовать все шесть гигабайт памяти был придуман механизм виртуального адресного пространства. Создается виртуальное пространство очень большого размера, а из него уже выделяется по 6 Гб для каждой программы. Если интересно, это адресное пространство можно найти в файле /proc/kcore, только не вздумайте никуда его копировать.
Выделенное адресное пространство для программы называется сегментом. Как только программа попытается записать или прочитать данные не из своего сегмента, ядро отправит ей сигнал SIGSEGV и программа завершится с нашей ошибкой. Более того, каждый сегмент поделен на секции, в некоторые из них запись невозможна, другие нельзя выполнять, если программа и тут попытается сделать что-то запрещенное, мы опять получим ошибку сегментации Ubuntu.
Почему возникает ошибка сегментации?
И зачем бы это порядочной программе лезть, куда ей не положено? Да в принципе, незачем. Это происходит из-за ошибки при написании программ или несовместимых версиях библиотек и ПО. Часто эта ошибка встречается в программах на Си или C++. В этом языке программисты могут вручную работать с памятью, а язык со своей стороны не контролирует, чтобы они это делали правильно, поэтому одно неверное обращение к памяти может обрушить программу.
Почему может возникать эта ошибка при несовместимости библиотек? По той же причине — неверному обращению к памяти. Представим, что у нас есть библиотека linux (набор функций), в которой есть функция, которая выполняет определенную задачу. Для работы нашей функции нужны данные, поэтому при вызове ей нужно передать строку. Наша старая версия библиотеки ожидает, что длина строки будет до 256 символов. Но программа была обновлена формат записи поменялся, и теперь она передает библиотеке строку размером 512 символов. Если обновить программу, но оставить старую версию библиотеки, то при передаче такой строки 256 символов запишутся нормально в подготовленное место, а вот вторые 256 перезапишут данные программы, и возможно, попытаются выйти за пределы сегмента, тогда и будет ошибка сегментирования linux.
Что делать если возникла ошибка сегментирования?
Если вы думаете, что это ошибка в программе, то вам остается только отправить отчет об ошибке разработчикам. Но вы все-таки еще можете попытаться что-то сделать.
Например, если падает с ошибкой сегментации неизвестная программа, то мы можем решить что это вина разработчиков, но если с такой ошибкой падает chrome или firefox при запуске возникает вопрос, может мы делаем что-то не так? Ведь это уже хорошо протестированные программы.
Первое, что нужно сделать — это обновить систему до самой последней версии, возможно, был баг и его уже исправили, а может у вас установлены старые версии библиотек и обновление решит проблему. В Ubuntu это делается так:
sudo apt update
sudo apt full-upgrade
Если это не помогло, нужно обнулить настройки программы до значений по умолчанию, возможно, удалить кэш. Настройки программ в Linux обычно содержатся в домашней папке, скрытых подкаталогах с именем программы. Также, настройки и кэш могут содержаться в каталогах ~/.config и ~/.cache. Просто удалите папки программы и попробуйте снова ее запустить. Если и это не помогло, вы можете попробовать полностью удалить программу, а потом снова ее установить, возможно, какие-нибудь зависимости были повреждены:
sudo apt remove пакет_программы
sudo apt autoremove
sudo apt install пакет_программы
Если есть возможность, попробуйте установить программу из другого источника, например, не из PPA, а более старую версию, из официальных репозиториев.
Когда вы все это выполнили, скорее всего, проблема не в вашем дистрибутиве, а в самой программе. Нужно отправлять отчет разработчикам. В Ubuntu это можно сделать с помощью программы apport-bug. Обычно Ubuntu предлагает это сделать сразу, после того как программа завершилась с ошибкой сегментирования. Если же ошибка сегментирования Ubuntu встречается не в системной программе, то вам придется самим искать разработчиков и вручную описывать что произошло.
Чтобы помочь разработчикам решить проблему, недостаточно отправить им только сообщение что вы поймали Segmentation Fault, нужно подробно описать проблему, действия, которые вы выполняли перед этим, так чтобы разработчик мог их воспроизвести. Также, желательно прикрепить к отчету последние функции, которые вызывала программа (стек вызовов функций), это может очень сильно помочь разработчикам.
Рассмотрим, как его получить. Это не так уж сложно. Сначала запустите вашу программу, затем узнайте ее PID с помощью команды:
pgrep программа
Дальше запускаем отладчик gdb:
sudo gdb -q
Подключаемся к программе:
(gdb) attach ваш_pid
После подключения программа станет на паузу, продолжаем ее выполнение командой:
(gdb) continue
Затем вам осталось только вызвать ошибку:
И набрать команду, которая выведет стек последних вызовов:
(gdb) backtrace
Вывод этой команды и нужно отправлять разработчикам. Чтобы отключиться от программы и выйти наберите:
(gdb) detach
(gdb) quit
Дальше остается отправить отчет и ждать исправления ошибки. Если вы не уверены, что ошибка в программе, можете поспрашивать на форумах. Когда у вас есть стек вызовов, уже можно попытаться, если не понять в чем проблема, то попытаться узнать, не сталкивался ли с подобной проблемой еще кто-то.
Выводы
Теперь у вас есть приблизительный план действий, что нужно делать, когда появляется ошибка сегментирования сделан дамп памяти ubuntu. Если вы знаете другие способы решить эту проблему, напишите в комментариях!
Статья распространяется под лицензией Creative Commons ShareAlike 4.0 при копировании материала ссылка на источник обязательна .
Содержание
- Ошибка сегментирования Ubuntu
- Что такое ошибка сегментации?
- Почему возникает ошибка сегментации?
- Что делать если возникла ошибка сегментирования?
- Выводы
- gcc: ошибка сегментирования
- Re: gcc: ошибка сегментирования
- Re: gcc: ошибка сегментирования
- Re: gcc: ошибка сегментирования
- Re: gcc: ошибка сегментирования
- Re: gcc: ошибка сегментирования
- Re: gcc: ошибка сегментирования
- Re: gcc: ошибка сегментирования
- Re: gcc: ошибка сегментирования
- Re: gcc: ошибка сегментирования
- Re: gcc: ошибка сегментирования
- Re: gcc: ошибка сегментирования
- Re: gcc: ошибка сегментирования
- Re: gcc: ошибка сегментирования
- Re: gcc: ошибка сегментирования
- Re: gcc: ошибка сегментирования
- Re: gcc: ошибка сегментирования
- Re: gcc: ошибка сегментирования
- [проблемы из ниоткуда] ошибка сегментирования. как найти причину?
- Ошибка сегментирования (APT)
- Re: Ошибка сегментирования (APT)
- Re: Ошибка сегментирования (APT)
- Re: Ошибка сегментирования (APT)
- Re: Ошибка сегментирования (APT)
- Re: Ошибка сегментирования (APT)
- Re: Ошибка сегментирования (APT)
- Re: Ошибка сегментирования (APT)
- Re: Ошибка сегментирования (APT)
- Re: Ошибка сегментирования (APT)
- Re: Ошибка сегментирования (APT)
- Ошибка сегментирования Ubuntu
- Что такое ошибка сегментации?
- Почему возникает ошибка сегментации?
- Что делать если возникла ошибка сегментирования?
- Выводы
- Оцените статью:
- Об авторе
- 7 комментариев
Ошибка сегментирования Ubuntu
Не всегда программы в Linux запускаются как положено. Иногда, в силу разных причин программа вместо нормальной работы выдает ошибку. Но нам не нужна ошибка, нам нужна программа, вернее, та функция, которую она должна выполнять. Сегодня мы поговорим об одной из самых серьезных и непонятных ошибок. Это ошибка сегментации Ubuntu. Если такая ошибка происходит только один раз, то на нее можно не обращать внимания, но если это регулярное явление нужно что-то делать.
Конечно, случается эта проблема не только в Ubuntu, а во всех Linux дистрибутивах, поэтому наша инструкция будет актуальна для них тоже. Но сосредоточимся мы в основном на Ubuntu. Рассмотрим что такое ошибка сегментирования linux, почему она возникает, а также как с этим бороться и что делать.
Что такое ошибка сегментации?
Ошибка сегментации, Segmentation fault, или Segfault, или SIGSEGV в Ubuntu и других Unix подобных дистрибутивах, означает ошибку работы с памятью. Когда вы получаете эту ошибку, это значит, что срабатывает системный механизм защиты памяти, потому что программа попыталась получить доступ или записать данные в ту часть памяти, к которой у нее нет прав обращаться.
Чтобы понять почему так происходит, давайте рассмотрим как устроена работа с памятью в Linux, я попытаюсь все упростить, но приблизительно так оно и работает.
Допустим, в вашей системе есть 6 Гигабайт оперативной памяти, каждой программе нужно выделить определенную область, куда будет записана она сама, ее данные и новые данные, которые она будет создавать. Чтобы дать возможность каждой из запущенных программ использовать все шесть гигабайт памяти был придуман механизм виртуального адресного пространства. Создается виртуальное пространство очень большого размера, а из него уже выделяется по 6 Гб для каждой программы. Если интересно, это адресное пространство можно найти в файле /proc/kcore, только не вздумайте никуда его копировать.
Выделенное адресное пространство для программы называется сегментом. Как только программа попытается записать или прочитать данные не из своего сегмента, ядро отправит ей сигнал SIGSEGV и программа завершится с нашей ошибкой. Более того, каждый сегмент поделен на секции, в некоторые из них запись невозможна, другие нельзя выполнять, если программа и тут попытается сделать что-то запрещенное, мы опять получим ошибку сегментации Ubuntu.
Почему возникает ошибка сегментации?
И зачем бы это порядочной программе лезть, куда ей не положено? Да в принципе, незачем. Это происходит из-за ошибки при написании программ или несовместимых версиях библиотек и ПО. Часто эта ошибка встречается в программах на Си или C++. В этом языке программисты могут вручную работать с памятью, а язык со своей стороны не контролирует, чтобы они это делали правильно, поэтому одно неверное обращение к памяти может обрушить программу.
Что делать если возникла ошибка сегментирования?
Если вы думаете, что это ошибка в программе, то вам остается только отправить отчет об ошибке разработчикам. Но вы все-таки еще можете попытаться что-то сделать.
Например, если падает с ошибкой сегментации неизвестная программа, то мы можем решить что это вина разработчиков, но если с такой ошибкой падает chrome или firefox при запуске возникает вопрос, может мы делаем что-то не так? Ведь это уже хорошо протестированные программы.
Если это не помогло, нужно обнулить настройки программы до значений по умолчанию, возможно, удалить кэш. Настройки программ в Linux обычно содержатся в домашней папке, скрытых подкаталогах с именем программы. Также, настройки и кэш могут содержаться в каталогах
/.cache. Просто удалите папки программы и попробуйте снова ее запустить. Если и это не помогло, вы можете попробовать полностью удалить программу, а потом снова ее установить, возможно, какие-нибудь зависимости были повреждены:
Если есть возможность, попробуйте установить программу из другого источника, например, не из PPA, а более старую версию, из официальных репозиториев.
Когда вы все это выполнили, скорее всего, проблема не в вашем дистрибутиве, а в самой программе. Нужно отправлять отчет разработчикам. В Ubuntu это можно сделать с помощью программы apport-bug. Обычно Ubuntu предлагает это сделать сразу, после того как программа завершилась с ошибкой сегментирования. Если же ошибка сегментирования Ubuntu встречается не в системной программе, то вам придется самим искать разработчиков и вручную описывать что произошло.
Чтобы помочь разработчикам решить проблему, недостаточно отправить им только сообщение что вы поймали Segmentation Fault, нужно подробно описать проблему, действия, которые вы выполняли перед этим, так чтобы разработчик мог их воспроизвести. Также, желательно прикрепить к отчету последние функции, которые вызывала программа (стек вызовов функций), это может очень сильно помочь разработчикам.
Рассмотрим, как его получить. Это не так уж сложно. Сначала запустите вашу программу, затем узнайте ее PID с помощью команды:
Дальше запускаем отладчик gdb:
Подключаемся к программе:
После подключения программа станет на паузу, продолжаем ее выполнение командой:
Затем вам осталось только вызвать ошибку:
И набрать команду, которая выведет стек последних вызовов:
Вывод этой команды и нужно отправлять разработчикам. Чтобы отключиться от программы и выйти наберите:
Дальше остается отправить отчет и ждать исправления ошибки. Если вы не уверены, что ошибка в программе, можете поспрашивать на форумах. Когда у вас есть стек вызовов, уже можно попытаться, если не понять в чем проблема, то попытаться узнать, не сталкивался ли с подобной проблемой еще кто-то.
Выводы
Теперь у вас есть приблизительный план действий, что нужно делать, когда появляется ошибка сегментирования сделан дамп памяти ubuntu. Если вы знаете другие способы решить эту проблему, напишите в комментариях!
Источник
gcc: ошибка сегментирования
Использую RH7б 2.6.22 Скомпилил программу без хитрых опций gcc 4.1.1, всё собралось ок.
Запуская программу, система пишет «ошибка сегментирования». Что это значит? Как локализовать ошибку?
Re: gcc: ошибка сегментирования
Re: gcc: ошибка сегментирования
Re: gcc: ошибка сегментирования
телепаты в отпуске, давай сорсы. Ищи траблы с указателями/переполнениями/etc 🙂
Re: gcc: ошибка сегментирования
Это значит, что твоя программа полезла в чужой сегмент памяти. Возможно из-за кривого указателя, выхода за предел массива etc.
Re: gcc: ошибка сегментирования
> Как локализовать ошибку?
Re: gcc: ошибка сегментирования
Сорцы простые printf( «dddn» ); return( 0 ) Правда ещё включается масса *.h файлов из Minix3 и после return( 0 ) идёт код.
Мне кажется компилятор сделал бинарник, который операционка выполнить не может. Мне не понятно почему. Хитрых опций при компиляции нет.
Создаётся ощущение, что есть в *.h файлах миникса заданы препроцессорные директивы, которые заставляют gcc создавать не вменяемый бинарник. Может я ошибаюсь, толкните на путь истинный.
Re: gcc: ошибка сегментирования
Кажется понял где копать. Всем спасибо за наводку.
Re: gcc: ошибка сегментирования
Re: gcc: ошибка сегментирования
Нету функции collect2 в библиотеки libc.a
ld не может собрать бинарник
Re: gcc: ошибка сегментирования
В исходниках нет ссылки на collect2
Re: gcc: ошибка сегментирования
Ни когда не встречал такой ошибки.
Re: gcc: ошибка сегментирования
Re: gcc: ошибка сегментирования
Он разве не находит тредовые функции? Он вроде не чтото другое ругается.
Re: gcc: ошибка сегментирования
> Он разве не находит тредовые функции? Он вроде не чтото другое ругается.
Что bt на корке показывает?
Re: gcc: ошибка сегментирования
Re: gcc: ошибка сегментирования
Очевидно или с либами вашими что-то не то или юзаете вы их как-то не так.
Re: gcc: ошибка сегментирования
>Очевидно или с либами вашими что-то не то или юзаете вы их как-то не так.
Источник
[проблемы из ниоткуда] ошибка сегментирования. как найти причину?
полагаю что дело в том что утром были найдены ошибки в файловой системе
то есть вроде бы читает файл и после этого падает. но толку.. ltrace вообще ничего не дал. похоже ошибка происходит непосредственно в коде программы ssh. ещё вчера всё работало..
1) Посмотри, нет ли записей о сегфолтах в messages.
2) Попробуй временно переименовать
ltrace ssh svn-server
Ну явно же написано, что у тебя known_hosts покоцан. Сдвинь его в сторонку и не парься.
Но таки программа не должна падать из-за проблемы в каком-то конфиге.
благодарю за толковые советы
не, я ж написал, ltrace ничего не дал:
да, кстати, вряд ли.. но я тем не менее сдвинул его.. не помогло..
можно ли как-то запустить проверку контрольных сумм всех файлов установленных пакетным менеджером?
Запустить под gdb и посмотреть почему упало.
>не, я ж написал, ltrace ничего не дал:
strace ssh svn-server
chkrootkit и rkhunter попробуй
и работал вчера ssh
ну и странно что на одном и том же месте.. скорее уж с диском проблемы..
мужик, я думаю специально для тебя нужно ввести звание Ъ^2.
Где,ж он на ровном месте? Какова вероятность, что при многочисленных попытках считать файл он всегда будет попадать на битую область?
> ну и странно что на одном и том же месте..
У меня эта штука половину портов засосала. 1111 А дело всё было в слоте памяти на материнке. И memtest86+ молчал.
libc переставь и tls и прочие либы, которыми пользуется ssh. переустановка только ssh не приведет к переустановке этих либ
Хехе. вероятная причина кроется в svn.
Сам лично сталкивался с регулярными падениями СВН составляющих в дебе. Как правило это происходило при попытке СВНа обратиться в дбасу. Но и в других ситуациях тоже, но реже.
> Хехе. вероятная причина кроется в svn.
open(«/home/andrey/.ssh/known_hosts», O_RDONLY) = 4 ★ ( 26.09.11 14:35:24 )
read() отработал нормально. Проблема где-то доальше в коде. Надо gdb.
Ага, я тоже сидел с gdb и дебажил почему svn up падает 🙂 Проблема была глубоко-глубоко 🙂 А на деле все оказалось куда проще.
Там цикл чтения по 4096. Еслибы он отработал нормально, мы бы увидели следующую итерацию (размер файла больше).
memtest’ом можно подтереться только. Инфа 100%.
Для таких вещей есть ключ для дебага. И gdb. И ещё strace.
А ещё подумай о том, что повреждение может быть в какой-то либе, которую он загружает.
Источник
Ошибка сегментирования (APT)
В общем имеется вдс с дебианом(etch), со вчерашнего дня при попытке как либо заюзать apt-get (or aptitude) выдает «ошибка сегментирования». пример: stvlad:/home/stvad# aptitude Ouch! Got SIGSEGV, dying.. Ошибка сегментирования либо же в случае с апт гетом stvlad:/home/stvad# apt-get install subversion Ошибка сегментирования. 0% подскажите в чем дело? и как это исправить..
Re: Ошибка сегментирования (APT)
что перед этим менялось? попробуй почистить кеш апта и заново apt-get update сделать.
Re: Ошибка сегментирования (APT)
щас попробую, отпишусь что менялось точноне помню помню поставил питон, htop, mc.
Re: Ошибка сегментирования (APT)
Re: Ошибка сегментирования (APT)
ldd `which aptitude`
Или это не бинарник?
Re: Ошибка сегментирования (APT)
вообще то бинарник )
На Ленни выдаст вот
$ldd `which aptitude`
linux-gate.so.1 => (0xffffe000)
libapt-pkg-libc6.7-6.so.4.6 => /usr/lib/libapt-pkg-libc6.7-6.so.4.6 (0xb7e63000)
libncursesw.so.5 => /lib/libncursesw.so.5 (0xb7e25000)
libsigc-2.0.so.0 => /usr/lib/libsigc-2.0.so.0 (0xb7e1e000)
libcwidget.so.3 => /usr/lib/libcwidget.so.3 (0xb7d5a000)
libept.so.0 => /usr/lib/libept.so.0 (0xb7c99000)
libxapian.so.15 => /usr/lib/libxapian.so.15 (0xb7b43000)
libz.so.1 => /usr/lib/libz.so.1 (0xb7b30000)
libpthread.so.0 => /lib/i686/cmov/libpthread.so.0 (0xb7b18000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0xb7a32000)
libm.so.6 => /lib/i686/cmov/libm.so.6 (0xb7a09000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xb79fc000)
libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb78a7000)
libutil.so.1 => /lib/i686/cmov/libutil.so.1 (0xb78a3000)
libdl.so.2 => /lib/i686/cmov/libdl.so.2 (0xb789e000)
/lib/ld-linux.so.2 (0xb7f47000)
Re: Ошибка сегментирования (APT)
удалил кеш. загрузило индексы и снова выдало ошибку сигментирования.
Re: Ошибка сегментирования (APT)
попробуйте сделать strace на аптитуду, хоть видно будет на загрузке какого файла оно падает
Re: Ошибка сегментирования (APT)
Признавайся, добавлял репозитарии Lenny или Sid?
Re: Ошибка сегментирования (APT)
признаюсь добавлял и работало))) потом перестало((( в них причина?
Re: Ошибка сегментирования (APT)
ну и надо было перееждать на ленни уже.
Источник
Ошибка сегментирования Ubuntu
Не всегда программы в Linux запускаются как положено. Иногда, в силу разных причин программа вместо нормальной работы выдает ошибку. Но нам не нужна ошибка, нам нужна программа, вернее, та функция, которую она должна выполнять. Сегодня мы поговорим об одной из самых серьезных и непонятных ошибок. Это ошибка сегментации Ubuntu. Если такая ошибка происходит только один раз, то на нее можно не обращать внимания, но если это регулярное явление нужно что-то делать.
Конечно, случается эта проблема не только в Ubuntu, а во всех Linux дистрибутивах, поэтому наша инструкция будет актуальна для них тоже. Но сосредоточимся мы в основном на Ubuntu. Рассмотрим что такое ошибка сегментирования linux, почему она возникает, а также как с этим бороться и что делать.
Что такое ошибка сегментации?
Ошибка сегментации, Segmentation fault, или Segfault, или SIGSEGV в Ubuntu и других Unix подобных дистрибутивах, означает ошибку работы с памятью. Когда вы получаете эту ошибку, это значит, что срабатывает системный механизм защиты памяти, потому что программа попыталась получить доступ или записать данные в ту часть памяти, к которой у нее нет прав обращаться.
Чтобы понять почему так происходит, давайте рассмотрим как устроена работа с памятью в Linux, я попытаюсь все упростить, но приблизительно так оно и работает.
Допустим, в вашей системе есть 6 Гигабайт оперативной памяти, каждой программе нужно выделить определенную область, куда будет записана она сама, ее данные и новые данные, которые она будет создавать. Чтобы дать возможность каждой из запущенных программ использовать все шесть гигабайт памяти был придуман механизм виртуального адресного пространства. Создается виртуальное пространство очень большого размера, а из него уже выделяется по 6 Гб для каждой программы. Если интересно, это адресное пространство можно найти в файле /proc/kcore, только не вздумайте никуда его копировать.
Выделенное адресное пространство для программы называется сегментом. Как только программа попытается записать или прочитать данные не из своего сегмента, ядро отправит ей сигнал SIGSEGV и программа завершится с нашей ошибкой. Более того, каждый сегмент поделен на секции, в некоторые из них запись невозможна, другие нельзя выполнять, если программа и тут попытается сделать что-то запрещенное, мы опять получим ошибку сегментации Ubuntu.
Почему возникает ошибка сегментации?
И зачем бы это порядочной программе лезть, куда ей не положено? Да в принципе, незачем. Это происходит из-за ошибки при написании программ или несовместимых версиях библиотек и ПО. Часто эта ошибка встречается в программах на Си или C++. В этом языке программисты могут вручную работать с памятью, а язык со своей стороны не контролирует, чтобы они это делали правильно, поэтому одно неверное обращение к памяти может обрушить программу.
Что делать если возникла ошибка сегментирования?
Если вы думаете, что это ошибка в программе, то вам остается только отправить отчет об ошибке разработчикам. Но вы все-таки еще можете попытаться что-то сделать.
Например, если падает с ошибкой сегментации неизвестная программа, то мы можем решить что это вина разработчиков, но если с такой ошибкой падает chrome или firefox при запуске возникает вопрос, может мы делаем что-то не так? Ведь это уже хорошо протестированные программы.
sudo apt update
sudo apt full-upgrade
Если это не помогло, нужно обнулить настройки программы до значений по умолчанию, возможно, удалить кэш. Настройки программ в Linux обычно содержатся в домашней папке, скрытых подкаталогах с именем программы. Также, настройки и кэш могут содержаться в каталогах
/.cache. Просто удалите папки программы и попробуйте снова ее запустить. Если и это не помогло, вы можете попробовать полностью удалить программу, а потом снова ее установить, возможно, какие-нибудь зависимости были повреждены:
sudo apt remove пакет_программы
sudo apt autoremove
sudo apt install пакет_программы
Если есть возможность, попробуйте установить программу из другого источника, например, не из PPA, а более старую версию, из официальных репозиториев.
Когда вы все это выполнили, скорее всего, проблема не в вашем дистрибутиве, а в самой программе. Нужно отправлять отчет разработчикам. В Ubuntu это можно сделать с помощью программы apport-bug. Обычно Ubuntu предлагает это сделать сразу, после того как программа завершилась с ошибкой сегментирования. Если же ошибка сегментирования Ubuntu встречается не в системной программе, то вам придется самим искать разработчиков и вручную описывать что произошло.
Чтобы помочь разработчикам решить проблему, недостаточно отправить им только сообщение что вы поймали Segmentation Fault, нужно подробно описать проблему, действия, которые вы выполняли перед этим, так чтобы разработчик мог их воспроизвести. Также, желательно прикрепить к отчету последние функции, которые вызывала программа (стек вызовов функций), это может очень сильно помочь разработчикам.
Рассмотрим, как его получить. Это не так уж сложно. Сначала запустите вашу программу, затем узнайте ее PID с помощью команды:
Дальше запускаем отладчик gdb:
Подключаемся к программе:
(gdb) attach ваш_pid
После подключения программа станет на паузу, продолжаем ее выполнение командой:
Затем вам осталось только вызвать ошибку:
И набрать команду, которая выведет стек последних вызовов:
Вывод этой команды и нужно отправлять разработчикам. Чтобы отключиться от программы и выйти наберите:
(gdb) detach
(gdb) quit
Дальше остается отправить отчет и ждать исправления ошибки. Если вы не уверены, что ошибка в программе, можете поспрашивать на форумах. Когда у вас есть стек вызовов, уже можно попытаться, если не понять в чем проблема, то попытаться узнать, не сталкивался ли с подобной проблемой еще кто-то.
Выводы
Теперь у вас есть приблизительный план действий, что нужно делать, когда появляется ошибка сегментирования сделан дамп памяти ubuntu. Если вы знаете другие способы решить эту проблему, напишите в комментариях!
Оцените статью:
Об авторе
Основатель и администратор сайта losst.ru, увлекаюсь открытым программным обеспечением и операционной системой Linux. В качестве основной ОС сейчас использую Ubuntu. Кроме Linux, интересуюсь всем, что связано с информационными технологиями и современной наукой.
7 комментариев
Спасибо, было очень интересно почитать про отладчик.
На самом деле от этого избавится я не могу. Остаётся мне всё сваливать на свой старый компьютер с 1024 мегабайтами озу. Постоянные ошибки сегментирования когда комплимирую какую-либо программу. Чтобы скомплимировать ядро надо по миллиону раз вводить make!! Щас выкину комп и куплю новый и думаю проблема сама разрешится.
Gentoo. cmake 3.14.6. Segmentation fault.
Xeon 2620 v2 24Gb ram
Проблема сама не решается почему-то. 8-(
С ошибкой SIGSEGV или так называемой ошибкой сегментации(на самом деле это ошибки обращения с памятью) вы ничё не сможете сделать. если вы юзер, а не разработчик и она возникает в вашей проге. можете только одного не запускать эту прогу удалить её или попытаться обновить, возможно(вовсе не обязательно!) её заметили и исправили. Но вообще лицензионное соглашение по Ubuntu вас предупреждает, что вы пользуетесь системой в которой софт вовсе не обязан работать и никто за это не отвечает. вы это делаете на свой страх и риск! это краткий его перевод. А если вы купили операционку заплатили бабки и заказали техподдержку, то вы тогда уже имеете право обратиться в службу тех поддержки сообщить баг, где и как он возникает и они обязаны не просто испавить его прислав патч, но так же всем таким как вы кто заплатил. Иначе вы имеете право подать на них в суд и они обязаны компенсировать вам убытки. Но это не Ubuntu. Обратная сторона медали свободного по и бесплатных операционок. среди Линуксовых есть AIX(только платная+ техподдержка), SUSE(не путать с Open Suse) и Debian(есть free урезаный вариант и нормальный платный). Это оч серьёзная ошибка краеугольный камень всех программ и работы компа в целом. Если это ломается, то всё летит к чёрту. Конечно они стараюстся и сразу посылать вас не будут. Это их репутация! но вообще дело в програмерах. Щаз стало оч много криворуких. Вот я смотрю на их код и удивляюсь, как можно так безалаберно писать проги! Если бы вы только это видели вы бы не удивились почему всё так плохо работает. Встречаются такие кадры которые всё только портят! ну а что програмеров не хаватет, делать надо много вот и берут всех подряд. А потом начинается. Если конечно это заметили до релиза, то ладно. Но тут всё ещё зависит от тестеров. Если они хорошие то найдут баги вовремя до релиза и исправят. но у нас как бывает. Отдела тестирования нет, сэкономили.. Тестер дай бог 2-3 а то часто 1 вообще. В программе всегда много ошибок. Особенно вначале. все мы ошибаемся, особенно некоторые. Причина? Нехватка мозгов или банально невнимательность. поэтому все проги должны быть тщательнейшим образом оттестированы. только тогда она может быть допущена к релизу. А ещё заказчик подгоняет. Хорошую прогу нельзя написать в спешке. тем более большую. Такие ошибки как оч трудно найти, а если она не всегда воспроизводится, так вообще нереально, Если только случайно наткнёшься. Потому что как бывает один раз вылетела, а второй нет и пошла дальше и норм. Или пошла дальше и всё стало неправильным. с програмой начинают твориться чудеса. это всё та же ошибка с памятью, которая всё портит. Вылететь может не только ваша прога но и вся система. Но даже если она стабильно воспроизводится, то на её поиск может понадобиться дни а может и неделя две кропотливой упорной работы, носящей изнуряющий характер. искать будут всем отделом. но её тогда по крайней мере можно найти. а если нет. то вам поможет только чудо. А уж что сделают после этого с тем кто это сделал я даже не знаю! Вот такие вот они эти ошибки сегментации. Я показал то что там происходит за кадром юзера.
У меня появляется такая ошибка при попытке запуска Viber
Источник
0
1
Приветствую, подскажите пожалуйста.
Есть программа myBase, она не устанавливается в систему, а просто извлекается из архива в домашней каталоге и запускается. С ней рядом идут библиотеки: libQtCore.so.4, libQtGui.so.4, libQtNetwork.so.4, libQtScript.so.4, libQtSvg.so.4, libQtWebKit.so.4. И файл myBase.run, в котором, как я понял, указывается путь к библиотекам (export LD_LIBRARY_PATH=«$PROGDIR:$LD_LIBRARY_PATH»). В стандартной директории /usr/lib/x86_64-linux-gnu/ у меня тоже есть эти библиотеки (только это ссылки на них).
Так вот, когда запускаю командой
, то программа запускается (используются библиотеки из поставки), но не работает скачивание и отображение изображений с https сайтов (а это мне очень нужно (с http работает)).
Если запускаю командой
, то программа не запускается (используются библиотеки из /usr/lib/x86_64-linux-gnu/) и появляется «Ошибка сегментирования».
Если запускаю командой
sudo QT_X11_NO_MITSHM=1 ./myBase
, то программа работает и скачивание с https сайтов тоже! Но не работает открытие ссылок в браузере (xdg-open) (это тоже нужно).
Вот вывод
ldd myBase:
linux-vdso.so.1 (0x00007ffc8012e000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007fc454f71000)
libQtWebKit.so.4 => /usr/lib/x86_64-linux-gnu/libQtWebKit.so.4 (0x00007fc452abf000)
libQtScript.so.4 => /usr/lib/x86_64-linux-gnu/libQtScript.so.4 (0x00007fc4525fe000)
libQtGui.so.4 => /usr/lib/x86_64-linux-gnu/libQtGui.so.4 (0x00007fc451910000)
libQtNetwork.so.4 => /usr/lib/x86_64-linux-gnu/libQtNetwork.so.4 (0x00007fc4515bc000)
libQtCore.so.4 => /usr/lib/x86_64-linux-gnu/libQtCore.so.4 (0x00007fc4510c9000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fc450d47000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fc450a43000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fc45082c000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fc45048d000)
libXrender.so.1 => /usr/lib/x86_64-linux-gnu/libXrender.so.1 (0x00007fc450283000)
libjpeg.so.62 => /usr/lib/x86_64-linux-gnu/libjpeg.so.62 (0x00007fc450018000)
libpng16.so.16 => /usr/lib/x86_64-linux-gnu/libpng16.so.16 (0x00007fc44fde5000)
libgstapp-1.0.so.0 => /usr/lib/x86_64-linux-gnu/libgstapp-1.0.so.0 (0x00007fc44fbd7000)
libgstpbutils-1.0.so.0 => /usr/lib/x86_64-linux-gnu/libgstpbutils-1.0.so.0 (0x00007fc44f9a2000)
libgstvideo-1.0.so.0 => /usr/lib/x86_64-linux-gnu/libgstvideo-1.0.so.0 (0x00007fc44f717000)
libgstaudio-1.0.so.0 => /usr/lib/x86_64-linux-gnu/libgstaudio-1.0.so.0 (0x00007fc44f4ac000)
libgstbase-1.0.so.0 => /usr/lib/x86_64-linux-gnu/libgstbase-1.0.so.0 (0x00007fc44f248000)
libgstreamer-1.0.so.0 => /usr/lib/x86_64-linux-gnu/libgstreamer-1.0.so.0 (0x00007fc44ef16000)
libgobject-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0 (0x00007fc44ecc3000)
libglib-2.0.so.0 => /lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007fc44e9af000)
libsqlite3.so.0 => /usr/lib/x86_64-linux-gnu/libsqlite3.so.0 (0x00007fc44e6a7000)
libfontconfig.so.1 => /usr/lib/x86_64-linux-gnu/libfontconfig.so.1 (0x00007fc44e469000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fc44e24c000)
libQtXmlPatterns.so.4 => /usr/lib/x86_64-linux-gnu/libQtXmlPatterns.so.4 (0x00007fc44dbc7000)
libQtOpenGL.so.4 => /usr/lib/x86_64-linux-gnu/libQtOpenGL.so.4 (0x00007fc44d8c5000)
libGL.so.1 => /usr/lib/x86_64-linux-gnu/libGL.so.1 (0x00007fc44d653000)
libX11.so.6 => /usr/lib/x86_64-linux-gnu/libX11.so.6 (0x00007fc44d313000)
libaudio.so.2 => /usr/lib/x86_64-linux-gnu/libaudio.so.2 (0x00007fc44d0f9000)
libfreetype.so.6 => /usr/lib/x86_64-linux-gnu/libfreetype.so.6 (0x00007fc44ce4a000)
libSM.so.6 => /usr/lib/x86_64-linux-gnu/libSM.so.6 (0x00007fc44cc42000)
libICE.so.6 => /usr/lib/x86_64-linux-gnu/libICE.so.6 (0x00007fc44ca25000)
libXext.so.6 => /usr/lib/x86_64-linux-gnu/libXext.so.6 (0x00007fc44c813000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fc44c60f000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fc44c407000)
/lib64/ld-linux-x86-64.so.2 (0x00007fc45518b000)
libgsttag-1.0.so.0 => /usr/lib/x86_64-linux-gnu/libgsttag-1.0.so.0 (0x00007fc44c1cc000)
liborc-0.4.so.0 => /usr/lib/x86_64-linux-gnu/liborc-0.4.so.0 (0x00007fc44bf4e000)
libgmodule-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgmodule-2.0.so.0 (0x00007fc44bd4a000)
libffi.so.6 => /usr/lib/x86_64-linux-gnu/libffi.so.6 (0x00007fc44bb41000)
libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007fc44b8ce000)
libexpat.so.1 => /lib/x86_64-linux-gnu/libexpat.so.1 (0x00007fc44b6a4000)
libxcb-dri3.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0 (0x00007fc44b4a1000)
libxcb-present.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-present.so.0 (0x00007fc44b29e000)
libxcb-sync.so.1 => /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1 (0x00007fc44b097000)
libxshmfence.so.1 => /usr/lib/x86_64-linux-gnu/libxshmfence.so.1 (0x00007fc44ae95000)
libglapi.so.0 => /usr/lib/x86_64-linux-gnu/libglapi.so.0 (0x00007fc44ac66000)
libXdamage.so.1 => /usr/lib/x86_64-linux-gnu/libXdamage.so.1 (0x00007fc44aa63000)
libXfixes.so.3 => /usr/lib/x86_64-linux-gnu/libXfixes.so.3 (0x00007fc44a85d000)
libX11-xcb.so.1 => /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1 (0x00007fc44a65b000)
libxcb.so.1 => /usr/lib/x86_64-linux-gnu/libxcb.so.1 (0x00007fc44a433000)
libxcb-glx.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0 (0x00007fc44a218000)
libxcb-dri2.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-dri2.so.0 (0x00007fc44a013000)
libXxf86vm.so.1 => /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1 (0x00007fc449e0d000)
libdrm.so.2 => /usr/lib/x86_64-linux-gnu/libdrm.so.2 (0x00007fc449bfd000)
libXt.so.6 => /usr/lib/x86_64-linux-gnu/libXt.so.6 (0x00007fc449994000)
libXau.so.6 => /usr/lib/x86_64-linux-gnu/libXau.so.6 (0x00007fc449790000)
libuuid.so.1 => /lib/x86_64-linux-gnu/libuuid.so.1 (0x00007fc44958b000)
libbsd.so.0 => /lib/x86_64-linux-gnu/libbsd.so.0 (0x00007fc449375000)
libXdmcp.so.6 => /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007fc44916f000)
Но если положить библиотеки, которые шли с программой в /usr/lib/x86_64-linux-gnu/, то вывод короче:
linux-vdso.so.1 (0x00007ffc37bfd000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f231cf15000)
libQtWebKit.so.4 => /usr/lib/x86_64-linux-gnu/libQtWebKit.so.4 (0x00007f231b3fb000)
libQtScript.so.4 => /usr/lib/x86_64-linux-gnu/libQtScript.so.4 (0x00007f231af54000)
libQtGui.so.4 => /usr/lib/x86_64-linux-gnu/libQtGui.so.4 (0x00007f231a2b3000)
libQtNetwork.so.4 => /usr/lib/x86_64-linux-gnu/libQtNetwork.so.4 (0x00007f2319f9b000)
libQtCore.so.4 => /usr/lib/x86_64-linux-gnu/libQtCore.so.4 (0x00007f2319aaa000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f2319728000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f2319424000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f231920d000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f2318e6e000)
libX11.so.6 => /usr/lib/x86_64-linux-gnu/libX11.so.6 (0x00007f2318b2e000)
libXrender.so.1 => /usr/lib/x86_64-linux-gnu/libXrender.so.1 (0x00007f2318924000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f2318707000)
libglib-2.0.so.0 => /lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007f23183f3000)
libpng12.so.0 => /lib/x86_64-linux-gnu/libpng12.so.0 (0x00007f23181cc000)
libfreetype.so.6 => /usr/lib/x86_64-linux-gnu/libfreetype.so.6 (0x00007f2317f1d000)
libfontconfig.so.1 => /usr/lib/x86_64-linux-gnu/libfontconfig.so.1 (0x00007f2317cdf000)
libXext.so.6 => /usr/lib/x86_64-linux-gnu/libXext.so.6 (0x00007f2317acd000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f23178c9000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f23176c1000)
/lib64/ld-linux-x86-64.so.2 (0x00007f231d12f000)
libxcb.so.1 => /usr/lib/x86_64-linux-gnu/libxcb.so.1 (0x00007f2317499000)
libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f2317226000)
libpng16.so.16 => /usr/lib/x86_64-linux-gnu/libpng16.so.16 (0x00007f2316ff3000)
libexpat.so.1 => /lib/x86_64-linux-gnu/libexpat.so.1 (0x00007f2316dc9000)
libXau.so.6 => /usr/lib/x86_64-linux-gnu/libXau.so.6 (0x00007f2316bc5000)
libXdmcp.so.6 => /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007f23169bf000)
libbsd.so.0 => /lib/x86_64-linux-gnu/libbsd.so.0 (0x00007f23167a9000)
- Печать
Страницы: [1] Вниз
Тема: Ошибка сегментирования (стек памяти сброшен на диск) [Решено] (Прочитано 9264 раз)
0 Пользователей и 1 Гость просматривают эту тему.

DANNNNN
Привет всем.
Есть программа. Она устанавливается из архива, который предварительно скачивается и после устанавливается.
Программа очень специфичная. Ты ей подсовываешь файл с командами, она его рассчитывает ( математического уклона программа) и выдаёт файл типа out.
И вот вчера при попытке запустить программу она выдаёт:
dan@dan-B450-AORUS-PRO:~/opt/2$ $GAUSS_EXEDIR/g16 NiFeSi2New33.inpЕстественно у меня всего один файл в папке из которой происходит запуск.
Unable to open input file "NiFeSi2New33.inp" or "NiFeSi2New33.inp".
Ошибка сегментирования (стек памяти сброшен на диск)
Что я делал. Я на создавал кучу входных файлов ( вот этот 3-ий был) и всё равно прога почему-то видит какой-то второй такой- же файл.
Я обновлял Ubuntu, я перестановил программу поверх старой. Ничего не помогает(.
Помогите кто чем может.
« Последнее редактирование: 18 Марта 2020, 11:41:50 от zg_nico »

bezbo
Ошибка сегментирования (стек памяти сброшен на диск)
Ошибка сегментации, Segmentation fault, или Segfault, или SIGSEGV в Ubuntu и других Unix подобных дистрибутивах, означает ошибку работы с памятью. Когда вы получаете эту ошибку, это значит, что срабатывает системный механизм защиты памяти, потому что программа попыталась получить доступ или записать данные в ту часть памяти, к которой у нее нет прав обращаться.
Помогите кто чем может
вам остается только отправить отчет об ошибке разработчикам
или запустите программу отладчиком sudo gdb -q

ReNzRv
И вот вчера
До этого система обновлялась?
Автоматическое обновление системы включено в настройках?

DANNNNN
Проблема решилась(
Очень странно. Но я взял файл, который до этого запускался и немного изменил в неём параметры на те которые нужны. И всё заработало.
До этого файлы были созданы как копии того файла, который был создан на другом ПК и перенесён на этот комп через флэшку. Все копии этого файла и выдавали ошибку, не смотря на то, что некоторые из них также я переносил и на другие диски, там редактриовали переносил обратно.
Что это было- не понятно.
Короче ошибка в файле О_о.
Системе обновлялась конечно же.
P.S. До написание сюда я просидел часов 5 над проблемой.
« Последнее редактирование: 16 Ноября 2019, 10:18:29 от DANNNNN »

andytux
«Разруха в головах, а не в клозетах.»
перенесён на этот комп через флэшку. …Короче ошибка в файле
Права на файл.
- Печать
Страницы: [1] Вверх
Вчера, после не удачной попытки компиляции из исходников и установки новой версии GLibC, получил ответ на любые команды в виде сообщения:
Segmentation fault
Так как я знаю то, что причина поломки системы состоит в неправильно установленной библиотеке GLibC, значит её необходимо переустановить. А раз необходимые нам команды не работают, значит придётся воспользоваться LiveCD.
А теперь приступим к исправлению этой ситуации.
1. Запустим систему с LiveCD/USB и откроем терминал.
Нам нужен именно терминал, поэтому иксы запускать нет необходимости.
Примечание: Образ DebianLiveCD мы возьмём для
i386отсюда или дляamd64отсюда.
Далее все команды мы будем выполнять в консоли.
2. Подготовка chroot окружения.
Посмотрим на таблицу разделов для того, чтобы узнать как именуется раздел с корнем файловой системы который мы будем чинить.
На экран должна будет выведена примерно такая таблица:
Устр-во Загр Начало Конец Блоки Id Система /dev/sda1 104863742 156301311 25718785 5 Расширенный /dev/sda2 * 104863744 125835263 10485760 83 Linux /dev/sda3 150001664 156301311 3149824 82 Linux своп / Solaris /dev/sda4 125837312 149999615 12081152 83 Linux
В моём случае корень расположен на разделе sda2.
Примонтируем раздел с корнем файловой системы и еще несколько важных директорий:
sudo mount /dev/sda2 /mnt
sudo mount --bind /dev /mnt/dev
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
Попробуем перейти в среду chroot:
И увидим сообщение — Segmentation fault, что предсказуемо. Тогда переустановим GLibC вручную.
3. Скачаем библиотеку GlibC.
glibc-2.13-1 на самом деле виртуальный пакет, а предоставляет он libc6, значит скачивать мы будем его.
Скачиваем libc6:
sudo apt-get download libc6
Теперь в текущей директории лежит файл libc6_2.13-38_i386.deb.
4. Распаковка библиотеки в корень системы назначения.
Отступление: Для тех кто пока не знает, deb пакет — это всего лишь обычный архив файлов, содержащий файлы, предназначенные для установки в систему, а так же некоторые служебные файлы, необходимые для того чтобы эту установку сделать гибкой. При помощи программы ar упаковано в один файл:
- Архив
control.tar.gz, содержащий скрипты, написанные майнтенером пакета, использующиеся при установке/удалении пакета, а так же другие служебные файлы. - Архив
data.tar.gz, содержащий двоичные файлы программы, ради которой создан пакет. - Файл
debian-binary.
4.1 Для Debian-based систем.
Используем dpkg с параметром -x, чтобы просто распаковать но не устанавливать. Распакуем в корень сломавшейся системы:
sudo dpkg -x libc6_2.13-38_i386.deb /mnt
4.2 Для не Debian-based систем.
Распакуем в текущую директорию 3 файла: control.tar.gz, data.tar.gz и debian-binary.
sudo ar vx libc6_2.13-38_i386.deb
Распакуем содержимое data.tar.gz в корень сломавшейся системы:
sudo tar zxvf data.tar.gz -C /mnt
5. Проверяем
Если сообщений об ошибках нет, значит ошибка Segmentation fault исправлена и теперь мы в chroot окружении.
6. Завершение
Выходим из chroot:
Отмонтируем ранее примонтированные разделы:
sudo umount /mnt/dev
sudo umount /mnt/proc
sudo umount /mnt/sys
sudo umount /mnt
Перезагрузим компьютер:
После проделанных манипуляций ранее сломанная система запустится в стандартном режиме, так как будто она и не ломалась.
Если эта статья помогла вам, пожалуйста, оставьте комментарий
Спасибо за прочтение!
Хоть я и новичок в GNU/Linux, но считаю, что вопрос с этим не связан.
Конкретный файл
*.djvu не запускается в evince. Как только не переименовывал, копипровал с десктопа, всё равно не хочет. Если через консоль запускать, выходит окошко программмы, в консоли появляется
ЦитироватьОшибка сегментирования
и закрывается окошко программы.
Ранее этот файл запускался (на Ubuntu в том же evince скорее всего), сейчас проверял на десктопной винде.
В программе djview открылось. Но всё же хотелось не загромождать себя кучей программ.
В гугле советовали создать папку evince в папке .gnome. Это мне не помогло, такая папка уже была.
P.S. файлик с оглавлением. Нагуглил похожую или такую же проблему, но решения не нашёл.
Цитата: Vic от 24 января 2012, 09:41:17В гугле советовали создать папку evince в папке .gnome. Это мне не помогло, такая папка уже была.
Нужно попробовать её переименовать, либо удалить. Это позволит программе запустится с дефолтными настройками.
Цитата: Brainey от 24 января 2012, 12:33:33Нужно попробовать её переименовать, либо удалить. Это позволит программе запустится с дефолтными настройками.
Переименовал в evince2. После запуска того же файла история повторилась и появилась папка evince.
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=591310
Посмотри в сислоге, у тебя то же самое? У меня на djvu в лог пишет следующее (с падением, разумеется)
ЦитироватьOct 12 00:36:48 debian kernel: [ 6466.234219] evince[3076] general protection ip:b1dfe8e0 sp:bfa02cf0 error:0
Oct 12 00:36:51 debian kernel: [ 6469.243779] evince[3091]: segfault at 50b27500 ip b1e952f4 sp bfcc67c0 error 4
Oct 12 00:36:51 debian kernel: [ 6469.243802] evince[3093]: segfault at 50b27500 ip b1e952f4 sp b26fefc0 error 4 in libdjvulibre.so.21.2.0[b1d65000+190000] in libdjvulibre.so.21.2.0[b1d65000+190000]
Oct 12 00:36:51 debian kernel: [ 6469.243826]
Oct 12 00:36:57 debian kernel: [ 6475.078254] evince[3099] general protection ip:b1dfe8e0 sp:bf8bff70 error:0
Ищи по слову evince. Ничего кроме ошибок он в логи не пишет.
Udachnik, что за сислог хоть? 
Искать по слову evince — значит юзать «| grep evince»?
Проще искать в специальных программах для просмотра логов. Например, gnome-system-log (для gnome) или ksystemlog (для KDE). Искать в syslog. Но можно просто набрать (обязательно от рута)
# cat /var/log/syslog | grep evince
Цитата: Udachnik от 24 января 2012, 13:22:49Но можно просто набрать (обязательно от рута)
vulibre.so.21.2.0[b1c66000+190000]
Jan 24 09:27:09 vic-vaptop kernel: [ 6268.130841] evince[3684]: segfault at 7009d4bd ip b1c962f4 sp bff33180 error 4
Jan 24 09:27:09 vic-vaptop kernel: [ 6268.130855] evince[3688]: segfault at 7009d4bd ip b1c962f4 sp b26a4040 error 4 in libdjvulibre.so.21.2.0[b1b66000+190000] in libdjvulibre.so.21.2.0[b1b66000+190000]
Jan 24 12:38:57 vic-vaptop kernel: [17776.239197] evince[4830]: segfault at e028bfaf ip b268e03f sp bfac35ac error 7
Jan 24 12:38:57 vic-vaptop kernel: [17776.239210] evince[4834]: segfault at b1c94b24 ip b1c9659b sp b268e000 error 7
Jan 24 13:29:01 vic-vaptop kernel: [20779.884972] evince[4932]: segfault at 9d148 ip b1d962f4 sp bfe713e0 error 4
Jan 24 13:29:01 vic-vaptop kernel: [20779.885006] evince[4936]: segfault at 9d148 ip b1d962f4 sp b27bb040 error 4 in libdjvulibre.so.21.2.0[b1c66000+190000]
Там много было, взял последнее. За 13:29 ручаюсь, точно тот самый файл пытался запустить.
Советую искать что-нибудь другое для просмтра djvu.
Алексей
-
- Новичок форума
- Сообщения: 6
- Записан
А чем Document Viewer не подходит?
Debian Testing, kernel 3.16-2-amd64, OpenBox
AMD A8-3750 / 16Gb RAM / ATI HD6550D (onboard) / Sound ASUS Xonar — DS
_______________________________
Debian Testing, kernel 3.14-2-amd64, OpenBox
HP-655 AMD E1 / 8Gb RAM / ATI HD7310M
Извиняюсь — это он и есть
[свернуть]
Debian Testing, kernel 3.16-2-amd64, OpenBox
AMD A8-3750 / 16Gb RAM / ATI HD6550D (onboard) / Sound ASUS Xonar — DS
_______________________________
Debian Testing, kernel 3.14-2-amd64, OpenBox
HP-655 AMD E1 / 8Gb RAM / ATI HD7310M
Алексей
-
- Новичок форума
- Сообщения: 6
- Записан
Цитата: Udachnik от 25 февраля 2012, 22:55:29В syslog что? Консоль не дает достаточно информации.
Feb 26 15:20:40 debianA kernel: [ 2929.203163] wkhtmltopdf[3814]: segfault at 55 ip 00007f0cd5ae9b64 sp 00007fffc57c3bf0 error 4 in libQtWebKit.so.4.6.3[7f0cd5233000+1083000]
Feb 26 15:22:18 debianA kernel: [ 3026.673411] wkhtmltopdf[3842]: segfault at 61 ip 00007fb8e1b59b64 sp 00007fff4d9e4560 error 4 in libQtWebKit.so.4.6.3[7fb8e12a3000+1083000]
Feb 26 15:22:45 debianA kernel: [ 3053.765387] wkhtmltopdf[3856]: segfault at 31 ip 00007fafd6c20b64 sp 00007fff7fd19150 error 4 in libQtWebKit.so.4.6.3[7fafd636a000+1083000]




























