Разработчику на заметку:
Итак есть простое приложение, для наглядности оно обязано валиться :
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 комментария:
Огромное спасибо! Наконец-то я знаю как решать подобного рода пробелмы.
Спасибо! Этот пост сэкономил мне кучу времени в поиске подобной ошибки.
Добрый день! Прочитал вашу статью про программу которая генерит сегфолт. А не могли бы вы придумать пример для генерирования ошибки General protection fault? Был бы очень признателен вам за это)
Работаю в IT несколько лет, и по нескольку раз в год захожу на эту страницу... :) Спасибо за хорошее руководство.
Отправить комментарий