Как я устанавливаю персистентные и условные контрольные точки на локально ограниченных по объему переменных?

Если Вы обращаетесь к этот плагин Spotify Rhythmbox , то я боюсь, что ответ не, нет способа установить его другой , чем создание всего Rhythmbox с ним .

Также уведомление, что код для того плагина не затрагивался в течение 3 лет, таким образом, вероятно, что больше не работает с текущим кодом Rhythmbox.

, В целом, мое предложение состояло бы в том, чтобы избегать того плагина и использовать собственный клиент Spotify вместо этого.

37
задан Ciro Santilli 新疆改造中心法轮功六四事件 12 June 2015 в 06:14
поделиться

2 ответа

Я согласен с Дейвом в том, что условная точка останова - это правильный путь.

Однако, чтобы сделать то, что вы просили, вы должны может использовать команду GDB commands , чтобы установить список команд GDB, которые будут выполняться при достижении точки останова. Я считаю это невероятно полезным.

Я предлагаю записывать ваши команды GDB в файл, чтобы их было легко редактировать и легко перезагружать с помощью команды source . Или вы можете указать командные файлы для загрузки в командной строке GDB или использовать .gdbinit, чтобы они загружались автоматически. Предположим, у меня есть функция формат , которая вызывается множеством других функций. Я хочу сломать его, но только после того, как была вызвана функция do_step_3 .

break do_step_3
commands
  break format
  continue
end

Вы можете использовать это для своей проблемы примерно так:

break func
commands
  watch var
  continue
end
32
ответ дан 27 November 2019 в 04:48
поделиться
  1. Я не уверен, какой язык мы используем, поэтому точный ответ будет отличаться, но не могли бы вы изменить переменную на статическую, глобальную или динамически выделяемую (и не освобождайте это когда функция вернется?). Таким образом, исходный адрес не изменится, и GDB сможет установить на нем точку останова.

  2. Вместо того, чтобы следить за значением, равным определенному значению; вы должны установить условную точку останова в строке, где вы хотите проверить значение var1 . Это должно иметь тот же эффект

, например,

(gdb) break main.c:123 if (var1 == 0)
4
ответ дан 27 November 2019 в 04:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: