Какие команды языка ведут себя точно так, как если бы они присутствовали в исходном коде в команде кода компиляции GDB?

GDB недавно представилcompile Команда для ввода кода во время выполнения, см.этот ответ для требований и минимального примера.

Но я заметил, что некоторые вещи не работают так, как будто я написал их в исходном коде в текущем месте:

compile code return; не завершает текущую функцию, только введенный код.

Гипотеза: код выполняется в новом фрейме стека, но в котором все еще видны локальные переменные.

сбой модификации регистра, например:

compile code asm volatile ("mov $0x123, %rbp");
p $rbp

Выход: нет0x123.

Гипотеза: все регистры сохраняются и восстанавливаются при запуске функции.

Кроме того,документация четко объясняет, что символы и типы введенного кода не видны снаружи.

Так, какова общая теория / полный список тех конструкций, которые «не работают»?

Презентация функции GNU Cauldron содержит обзор использования и внутренних компонентов:видео, презентация

Функция реализована наcompile/ подкаталог исходного кода 7.9.1 GDB.

Ответы на вопрос(1)

Ваш ответ на вопрос