23 окт. 2008 г.

Segmentation fault? Core dumped!

Приложение свалилось по Segmentation fault ? Таково c'est la vie и суровая действительность.
Разработчику на заметку:
Итак есть простое приложение, для наглядности оно обязано валиться :
main.cxx:
#include <string>
int main(){
std::string *s = 0;
return s->length();
}
Соберём его:
$ g++ main.cxx -o main
И запустим:
$ ./main
Segmentation fault

Всё ожидаемо. Для того, чтобы узнать место падения необходимо получить дамп.
$ ulimit -c unlimited
запускаем опять
$ ./main 
Segmentation fault (core dumped)
Итого у нас есть core файл, который поможет найти место, где произошёл Segmentation fault, для этого нам нужен gdb
(использовать gdb application core-file):
$ gdb main core
....
Core was generated by `./main'.
Program terminated with signal 11, Segmentation fault.
[New process 25667]
#0  0x4a0567d4 in std::string::length () from /usr/lib/gcc/i686-pc-linux-gnu/4.3.2/libstdc++.so.6
(gdb) where
#0  0x4a0567d4 in std::string::length () from /usr/lib/gcc/i686-pc-linux-gnu/4.3.2/libstdc++.so.6
#1  0x08048503 in main ()

4 комментария:

Assuri комментирует...

Огромное спасибо! Наконец-то я знаю как решать подобного рода пробелмы.

Анонимный комментирует...

Спасибо! Этот пост сэкономил мне кучу времени в поиске подобной ошибки.

Анонимный комментирует...

Добрый день! Прочитал вашу статью про программу которая генерит сегфолт. А не могли бы вы придумать пример для генерирования ошибки General protection fault? Был бы очень признателен вам за это)

Vitaly Isaev комментирует...

Работаю в IT несколько лет, и по нескольку раз в год захожу на эту страницу... :) Спасибо за хорошее руководство.