GDB: вызов функции в многопоточной программе без прогрессирующих потоков - PullRequest
1 голос
/ 09 июля 2019

Я отлаживаю многопоточную программу C ++ с помощью gdb.Вот поток отладки, которого я хотел бы добиться:

  1. запустить до точки останова, затем приостановить выполнение для всех потоков
  2. отключить [точки останова] с помощью команды disable
  3. вызов функции (определенной в моей программе) для печати состояния вектора (при сохранении других потоков в режиме паузы)

Однако, когда я выполняю вызов функции, которая печатает состояниесистемы несколько раз, значения структуры данных меняются.Если у меня нет какой-либо другой ошибки, это должно означать, что другие потоки работают во время работы моей функции печати. ​​

Вопросы:

  1. делать другиепотоки возобновляют выполнение, в то время как команда call выполняется в GDB?
  2. при условии, есть ли способ отключить это так, чтобы я мог держать потоки приостановленными, пока я анализирую состояние программы с помощью команд call?

1 Ответ

1 голос
/ 10 июля 2019

См. Комментарий @ KostasRim - set scheduler-locking on достигает желаемого поведения (https://sourceware.org/gdb/onlinedocs/gdb/All_002dStop-Mode.html). По умолчанию другие потоки запускаются во время пошагового выполнения, вызова функции и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...