Трассировка и защита памяти
- Хорошая книжка по отладке: https://en.wikibooks.org/wiki/Linux_Applications_Debugging_Techniques 
Strace
- Отслеживание системных вызовов с помощью ptrace - + вывод сопутствующей информации
 
- + у всех подпроцессов
- + фильтр на вызовы/группы
- + трассировка вызовов -k и показ параметров (-s###, -v) 
- + вброс ошибок
ИРЛ:
- Какие файлы (не) открывает (в т. ч. все открываемые файлы) - -y 
 
- Почему висит
- Куда полезло в сеть
- Что куда пишет/читает
- …
- Что сделает, если syscall обломается
- strace — руководство 
Другие похожие инструменты
Файл с примером:
- ld.so — LD_PRELOAD, LD_LIBRARY_PATH и т. д. 
- …
- cc -fstack-protector-all 
- cc -fsanitize=address 
- (-fno-omit-frame-pointer) 
Огороды памяти
- EFence/DUMA
- *malloc проекты (gperftools, jmalloc, memalloc …)
- libmemleak и ему подобные 
- …
Valgrind
- Полный эмулятор - В т. ч. память
 
- ⇒ отслеживать память, стек и кучу, количество вызовов, кеш процессора, треды.
Утечка памяти не обязательно приводит к ошибке. Порча памяти, к сожалению, тоже.
- The Valgrind Quick Start Guide (и вообще сайт) 
Д/З
- Прочитать про
- Создать в репозитории каталог 07_DebuggingTracing и положить туда решение следующей задачи: - Выяснить, какой функцией пользуется команда rm при удалении обычного файла 
- Написать LD_PRELOAD-враппер вокруг этой функции, который при попытке удалить файл с именем, содержащим подстроку FIX, возвращал бы ошибку EPERM 
- Написать как минимум Makefile (или любой другой сценарий) для - сборки библиотеки-враппера
- тестирования библиотеки-враппера (без враппера два файла удаляются, с враппером удаляется только один, плюс можно ещё exit status проверить, если не лень)
- удаления генератов
 
 (необязательно) оформить это в виде autotools/CMake/… проекта (необязательно) оформить это в виде autotools/CMake/… проекта- если делать всё по инструкции (читать так: 5.4.1, затем 5.3, затем 3.2, в котором написано, что библиотека откладывается в каталог .libs) вам понадобится установить libtool 
- У меня вышло как-то так:   
 
 
