GDB выполняет следующую инструкцию после нажатия на точку наблюдения - PullRequest
0 голосов
/ 09 января 2019

У меня есть функция следующего вида:

void foo(){
    int *a = //...
    *a = 1;
    //some actions
    *a = 2;
    //some actions
    *a = 3;
    //some actions
    //etc...
}

Я хочу установить точку наблюдения на a, выполнить следующую инструкцию с помощью si, распечатать регистры, а затем продолжить до тех пор, пока точка наблюдения a снова не будет достигнута, и повторить это.

Я написал следующий скрипт:

b foo
watch *a
commands
    si
    info reg
    cont
end
cont

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

Любые другие команды в списке команд после команды, которая возобновляется исполнение, игнорируются. Это потому, что каждый раз, когда вы возобновите исполнение (даже с простым следующим или шагом), вы можете столкнуться с другим точка останова - которая может иметь свой собственный список команд, ведущий к Неясности в отношении того, какой список выполнять.

все после si просто игнорируется.

Есть ли способ написать такой скрипт (gdb или python)?

1 Ответ

0 голосов
/ 09 января 2019

До watch *a вы можете запустить программу через run.

Если нет, вы получите что-то вроде этого: No symbol "a" in current context.

Так попробуйте это:

b foo
run
watch *a
commands
    si
    info reg
    cont
end
cont
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...