Как остановить программу в gdb при записи в определенный файл, известный по его имени - PullRequest
5 голосов
/ 08 ноября 2011

Как мне установить точку останова в gdb для остановки программы при каждой записи в определенный файл, известный под его именем?

1 Ответ

7 голосов
/ 08 ноября 2011

Вы можете заставить GDB останавливаться при каждом системном вызове write с помощью catch syscall write.

Поскольку write работает с файловыми дескрипторами, а не с именованными файлами, вы не можете сделать эту точку останова условнойна имя;вам нужно сначала найти файловый дескриптор, который соответствует вашему «интересному» файлу.

В Linux вы можете посмотреть на ls -l /proc/<pid>/fd/*, чтобы связать файловые дескрипторы с именами.

Другоесистемы могут иметь lsof или другие специфичные для системы механизмы для выполнения того же.

Получив дескриптор файла, вы можете сделать условное выражение catch (поэтому GDB останавливается только при записи этого конкретного файла).).Точные детали того, как это сделать, различаются в разных операционных системах и процессорах, и вы тоже не предоставили.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...