Я отлаживаю некоторый JIT-код. Я присоединяю gdb к запущенному процессу. Я ищу способы установить точку останова (или любым другим способом), которая сделает gdb перерыв/паузу в каждом call instruction для конкретной функции. Я знаю имя функции.
Примечание. Я могу установить точку останова на взятой ветке для call instruction, т. е. gdb прерывается на функции, но я хочу, чтобы отладчик прервался перед тем, как взять эту ветвь, т. е. на call instruction.
Это возможно?
Спасибо
Ответ 1 · рейтинг 3 · Employed Russian
Я хочу, чтобы отладчик сломался, прежде чем перейти к этой ветке.
Но почему? Остановка перед выполнением ветки (в отличие от остановки сразу после) не дает вам абсолютно никакой дополнительной информации.
Как правильно заметил Iwillnotexist Idonotexist, существует много способов ВЫЗВАТЬ данную функцию, например.
CALL 0x8(%rax)
CALL %rbx
CALL *0x12345678
Кроме того, в JIT-коде такие инструкции вызова могут генерироваться и отбрасываться с очень высокой скоростью, поэтому, даже если вы можете волшебным образом найти их все, вам все равно придется обновлять список точек останова, чтобы устанавливать их всякий раз, когда JIT захочет.