Книга: Разработка приложений в среде Linux. Второе издание
7.5.1. Использование Electric Fence
7.5.1. Использование Electric Fence
Одна из наиболее примечательных особенностей Electric Fence заключается в простоте ее использования. Нужно всего лишь скомпоновать свою программу с библиотекой libefence.а
, указав -lefence
в качестве последнего аргумента. В результате код будет готов к отладке. Давайте посмотрим, что происходит при запуске тестовой программы с применением Electric Fence.
$ ./broken
Electric Fence 2.2.0 Copyright (C) 1987 - 1999 Bruce Perens.
1: 12345
Segmentation fault (core dumped)
Ошибка сегментации (дамп ядра сброшен)
Хотя Electric Fence непосредственно не указывает на место, где произошла ошибка, проблема становится намного очевидней. Можно легко и точно определить проблемный участок, запустив программу под управлением отладчика, например gdb
. Для того чтоб gdb
смог точно указать на проблему, соберите программу с отладочной информацией, указав для gcc
флажок -g
, затем запустите gdb
и зададите имя исполняемого файла, который нужно отладить. Когда программы уничтожается, gdb
точно показывает, в какой строке произошел сбой.
Вот как выглядит описанная процедура.
$ gcc -ggdb -Wall -о broken broken.с -lefence
$ gdb broken
...
(gdb) run
Starting program: /usr/src/lad/code/broken
Electric Fence 2.2.0 Copyright (C) 1987 - 1999 Bruce Perens.
1: 12345
Program received signal SIGSEGV, Segmentation fault.
Программа получила сигнал SIGSEGV, ошибка сегментации.
0х007948с6 in strcpy() from /lib/tls/libc.so.6
(gdb) where
#0 0x007948c6 in strcpy() from /lib/tls/libc.so.6
#1 0x08048566 in broken() at broken.c:21
#2 0x08048638 in main() at broken.c:47
(gdb)
Благодаря Electric Fence и gdb
, становится понятно, что в строке 21 файла broken.с
имеется ошибка, связанная со вторым вызовом strcpy()
.
- 15.5.2.2. Electric Fence
- 7.5. Electric Fence
- Восстановление с использованием инструмента gbak
- Типы страниц и их использование
- Использование констант
- Использование переменной окружения ISC_PATH
- Использование сервера Yaffil внутри процесса
- Использование CAST() с типами дата
- Использование типов содержимого и столбцов
- Вызов хранимых процедур InterBase с использованием стандартного синтаксиса ODBC
- Использование кнопки Автосумма
- 24.7. Использование программы-твикера