GDB: Как я могу сделать паузу во время выполнения цикла? - PullRequest
31 голосов
/ 02 января 2012

Я пишу программный рендер в g ++ под mingw32 в Windows 7, используя NetBeans 7 в качестве моей IDE.

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

Суть этого подхода в том, что, возможно, самый простой (и во многих отношениях самый точный) способ профилирования / оптимизации - это просто выборка стека непосредственно время от времени путем остановки выполнения ... К сожалению, NetBeans не пауза. Поэтому я пытаюсь выяснить, как сделать эту выборку напрямую с помощью gdb.

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

Кто-нибудь знает простой способ получения gdb (или других инструментов gnu):

  1. Образец стека, когда я говорю так (предпочтительно)
  2. Взять целую кучу образцов через случайные интервалы в течение заданного периода

... дать мою заявленную конфигурацию?

1 Ответ

56 голосов
/ 02 января 2012

Вы пытались просто запустить свой исполняемый файл в gdb, а затем просто нажать ^ C ( Ctrl + C ), когда хотите прервать его?Это должно привести вас к приглашению GDB, где вы можете просто запустить команду where, чтобы увидеть, где вы находитесь, и затем продолжить выполнение с continue.

Если вы оказались в нерелевантном потоке (например,цикл пользовательского интерфейса), используйте thread, info threads и thread n, чтобы перейти к правильному, затем выполните where.

...