tgoop.com/hft_dev/75
Create:
Last Update:
Last Update:
GDB позволяет вводить команды из файла
Приведу несколько примеров. Поставить breakpoint с условием:
> cat 1.gdb
break my_func if (var > 10000)
commands
print var
info locals
info registers
backtrace
continue
end
Поставить одноразовый catch на write syscall:
tcatch syscall write
commands
printf "Syscall write\n"
printf "File descriptor: %d\n", $rdi
printf "Buffer: %p\n", $rsi
printf "Bytes: %d\n", $rdx
continue
end
Объявить функцию, которая принимает адрес и ставит условный watch на этот адрес:
define my_int_watch
watch *(int*)$arg0 if *(int*)$arg0 % 3 == 0
commands
printf "New value: %d\n", *(int*)$arg0
continue
end
end
Реальные сценарии как правило чуть сложнее, т.к. дебаг символов может и не быть, условия посложнее, но для демонстрации идеи эти подходят.
Далее команды можно запустить из файла:
gdb -p 1234 -x 1.gdb
или прямо в cli:
> source 1.gdb
Да, то же самое можно ввести вручную поэтапно в cli, однако ручной ввод комманд требует времени, что может быть непозволительно в уже запущенных программах, которые нельзя прерывать.
GDB также умеет в Python скрипты, но на питоняке я писал только pretty-printer'ы. Кто-то использовал python в gdb?
BY Один микросек - C++, low latency, concurrency, HFT
Share with your friend now:
tgoop.com/hft_dev/75