2017-01-30 12 views
1

Я отлаживаю проблему, которую я нашел в компиляторе clang на GNU/Linux (сообщено here). Чтобы найти проблему, мне нужно отлаживать назад от точки, где clang записывает выходной файл.gdb catchpoint on write syscall не работает

Я попытался установить точку перехвата на системном вызове записи:

(gdb) catch syscall write 
Catchpoint 2 (syscall 'write' [1]) 

Я также установить контрольную точку:

(gdb) break write 
Breakpoint 3 at 0x7ffff6a7c700: write. (2 locations) 

Но когда я скомпилировать тестовую программу, нет точки останова срабатывает: GDB только выезды с как обычно. Я подтвердил, что он пишет выходной файл, поэтому запись должна быть вызвана где-то. Кто-нибудь знает, что я могу делать неправильно здесь? Благодаря!

ответ

1

Существует одна «наиболее распространенная» возможность, отладка clang, а не clang -cc1. Драйвер повторно запускает себя, чтобы сделать трассировку стека и другие вещи проще с помощью ловушек ошибок в порожденных программах, и если вы отлаживаете clang, он не сможет установить точку останова, так как он не будет вызывать код, который у вас есть точка останова.

Вы можете использовать clang с -v, чтобы получить командную строку -cc1, а затем установить gdb -args на это.

+0

А, спасибо! Я не знал о clang -cc1. Чтобы отладить -cc1, я бы просто добавил -cc1 в аргументы командной строки? –

+0

Да. Я обновил свой ответ, чтобы отразить его. – echristo

+0

Большое спасибо! Я выполнил свою начальную команду с -v, а затем установил для нее свои аргументы gdb, и точка останова была сработана! Очень признателен! Я отметил это как ответ. –