Как позволить GDB прерваться при записи в точке наблюдения, даже если значение не изменилось - PullRequest
1 голос
/ 24 января 2020

Я пытаюсь проследить за процессом многопоточного приложения, записав файл журнала, который должен записывать каждую операцию записи в глобальную переменную, даже если значение не изменяется. В документации GDB говорится, что «watch» прерывается только при изменении значения. Проблема в том, что запись всех обращений с помощью 'awatch' была бы слишком сложной для регистрации. Есть ли способ регистрировать все, изменяя и не записывая операции? Мой сценарий до сих пор:

set pagination off
set logging file variable_writes.txt
set logging on

file EXECUTABLE

# need hardware watchpoint for multi thread support
watch SOME_VARIABLE
commands
    silent
    p /x SOME_VARIABLE
    bt 2
    continue
end

run

set logging off
quit

1 Ответ

0 голосов
/ 28 января 2020

Кажется, единственный способ получить немодифицирующие записи - использовать awatch. Это помогло ограничить количество записанных данных путем включения / выключения точки наблюдения в узком диапазоне вокруг интересной части.

Мой последний скрипт, который я использовал:

set pagination off
set output-radix 16
set logging file trace_variable.txt
set logging on

file EXECUTABLE

# need hardware watchpoint for multi thread support
awatch SOME_VARIABLE
commands 1
    bt 1
    continue
end

break SOME_POINT_BEFORE
commands 2
    enable 1
    continue
end

break SOME_POINT_AFTER
commands 3
    disable 1
    continue
end

# Watchpoint is enabled/disabled when reaching other breakpoints
# Starting disabled
disable 1

run

set logging off
quit
...