Как заставить GDB установить контрольные точки только повреждение после того, как точка достигнута данное число времена?

У меня есть функция, которая вызвана некоторое большое количество раз, и в конечном счете segfaults.

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

Я услышал, что могу установить a counter в GDB для точки останова, и каждый раз, когда точка останова поражена, счетчик постепенно уменьшается и только инициирован когда counter = 0.

Действительно ли это точно, и раз так как я делаю это? Дайте код gdb для установки такой точки останова.

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

1 ответ

Прочтите раздел 5.1.6 руководства GDB. Что вам нужно сделать, это сначала установить точку останова, а затем установить «счетчик игнорирования» для этого номера точки останова, например игнорировать 23 1000 .

Если вы не знаете, сколько раз игнорировать точку останова, и не хотите считать вручную, может помочь следующее:

  ignore 23 1000000   # set ignore count very high.

  run                 # the program will SIGSEGV before reaching the ignore count.
                      # Once it stops with SIGSEGV:

  info break 23       # tells you how many times the breakpoint has been hit, 
                      # which is exactly the count you want
154
ответ дан 24 November 2019 в 09:35
поделиться
Другие вопросы по тегам:

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