то, как я могу поместить точку останова на “что-то, печатается к терминалу” в gdb?

Я - индивидуальный магазин; у меня есть и удаленный сервер и локальный сервер.

я использую локальный сервер для быстрой разработки прототипа и цикла начального развития, где я вношу много изменений и потребности протестировать их быстро. Когда это дойдет до примерно-альфа-стадии, я настрою пользовательский подхост к проекту и развернусь к моему серверу. Существуют определенные функции, которые просто не могут быть протестированы локально - т.е. e-mail-based регистрация пользователя - и таким образом, эти функции разрабатываются на удаленном сервере. Так как это является МОИМ, и не реальное развертывание, это все еще главным образом без задержки. Так как у меня есть VPS, я имею полный контроль над средой разработки на обеих машинах.

25
задан martin 8 October 2009 в 15:11
поделиться

2 ответа

Используйте условную точку останова, которая проверяет первый параметр. В 64-битных системах x86 условие будет следующим:

(gdb) b write if 1 == $ rdi

В 32-битных системах это более сложно, потому что параметр находится в стеке, а это означает, что вам нужно для преобразования $ esp в int * и индексации параметра fd. Стек в этой точке имеет адрес возврата, длину, буфер и, наконец, fd.

Это сильно зависит от аппаратных платформ.

26
ответ дан 28 November 2019 в 21:16
поделиться

С помощью gdb 7.0 можно установить условную точку останова на syscall write():

(gdb) catch syscall write
Catchpoint 1 (syscall 'write' [4])
(gdb) condition 1 $ebx==1

$ebx содержит первый параметр syscall - здесь номер FD

.
14
ответ дан 28 November 2019 в 21:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: