Отладка программ
Отладка программ
Как сделать, чтобы создавался core dump:
ulimit -c unlimited echo core > /proc/sys/kernel/core_pattern
Можно ещё так (%u - uid, %p - pid, %e - executable):
echo /var/tmp/%u.%e.%p.core > /proc/sys/kernel/core_pattern
echo 1 > /proc/sys/kernel/print-fatal-signals
Включает запись в /var/log/messages о процессах, завершившихся из-за получения сигнала.
Поиск проблем с памятью
Отладку может упростить следующее ПО: Valgrind, Electric Fence, Google Perfomance Tools, Duma.
Duma
Рассмотрим пример отладки программы с помощью Duma (это развитие Electric Fence).
Первоначально надо включить создание core dump файла (см. выше).
Собираем программу с отладочной информацией. Затем запускаем
$ duma ./MyProgram
После завершения программы просматриваем core file:
$ gdb --core=core ./VargusViewer
Затем в gdb вводим
> bt
и просматриваем backtrace.
Google Performance Tools
Не получилось проверить.
Valgrind
Не получилось проверить.
AddressSanitizer
Входит в состав LLVM 3.1 и выше
Статический анализ кода
Для статического анализа кода следует воспользоваться ключами gcc и специальным ПО, таким как Cppcheck.
GCC
Некоторые полезные ключи gcc
-Wall включает все ворнинги, среди которых совместимость с новым стандартом -Wextra несколько ворнингов типа пустых тел в if'ах, сравнение signed и unsigned -Winit-self int i = i
Cppcheck
Распознает довольно много, находит следующие ошибки:
-некоторые memory leaks, например, отсутствие delete и delete[], отсутствие delete в деструкторе -выход за границу массива -exception'ы, бросаемые в деструкторе -разыменование нулевого указателя -разыменование после очистки памяти -виртуальность деструктора базового класса -использование одного и того же итератора для разных контейнеров -разные более мелкие штуки
Использование:
cppcheck -enable=all projectPath
Ссылки
http://www.opennet.ru/tips/940_gdb_debug_core.shtml
http://www.opennet.ru/base/dev/memory_leak_debug.txt.html
http://code.google.com/p/address-sanitizer/wiki/AddressSanitizer
http://sourceforge.net/apps/mediawiki/cppcheck/index.php?title=Main_Page#Documents_and_articles