Какие команды языка ведут себя точно так, как если бы они присутствовали в исходном коде в команде кода компиляции GDB?
GDB недавно представилcompile
Команда для ввода кода во время выполнения, см.этот ответ для требований и минимального примера.
Но я заметил, что некоторые вещи не работают так, как будто я написал их в исходном коде в текущем месте:
compile code return;
не завершает текущую функцию, только введенный код.
Гипотеза: код выполняется в новом фрейме стека, но в котором все еще видны локальные переменные.
сбой модификации регистра, например:
compile code asm volatile ("mov $0x123, %rbp");
p $rbp
Выход: нет0x123
.
Гипотеза: все регистры сохраняются и восстанавливаются при запуске функции.
Кроме того,документация четко объясняет, что символы и типы введенного кода не видны снаружи.
Так, какова общая теория / полный список тех конструкций, которые «не работают»?
Презентация функции GNU Cauldron содержит обзор использования и внутренних компонентов:видео, презентация
Функция реализована наcompile/
подкаталог исходного кода 7.9.1 GDB.