GDB установить точки останова в заголовочном файле C ++? - PullRequest
0 голосов
/ 06 июня 2018

У меня есть заголовочный файл future.hh, и я установил точку останова в строке 800, как показано ниже:

   795      ~future() {
   796          if (_promise) {
   797              _promise->_future = nullptr;
   798          }
   799          if (failed()) {
   800              report_failed_future(state()->get_exception());
   801          }

Я подумал, что если в будущем произойдет исключение, я смогу получить трассировку стека.Однако я получил это: enter image description here

Это не то, что я хочу.Это почему ?Так много точек останова.Когда я делаю continue, он будет останавливаться каждый раз, а не то, что я ожидал.

1 Ответ

0 голосов
/ 06 июня 2018

Когда вы делаете запрос, подобный break future.hh:800, GDB пытается установить точку останова на каждом возможном адресе, соответствующем этому местоположению источника.

В вашем случае, скорее всего, происходит то, что деструктор былмного раз, так что вы получите очень много точек останова.(Другой менее вероятный вариант - ошибка компилятора, приводящая к тому, что он как-то генерирует неверные таблицы строк.)

Компиляция без оптимизации не очень поможет - это может привести к меньшему количеству точек останова, но вы все равно увидите толькостолько остановок, потому что все, что происходит, - это остановка при каждом вызове деструктора.

Вместо этого, если вы знаете, что хотите останавливаться только на определенных деструкторах, тогда лучший подход - попытаться сузитьточки, в которых происходят остановки.Несколько идей:

  • Установите точку останова в окружающем вас коде, а не в этом деструкторе

  • Отключите некоторые или большинство местна точке останова.(В gdb точки останова можно отключить по отдельности.)

  • Сделайте условную точку останова условной, чтобы попытаться уменьшить количество нежелательных остановок

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