GDB: SIGFPE в цикле - PullRequest
       45

GDB: SIGFPE в цикле

2 голосов
/ 05 июля 2011

У меня SIGFPE происходит в цикле. Если я устанавливаю точку останова или обрабатываю SIGFPE с помощью stop, nopass и т. Д., Я теряю переменные кадра после этой строки. В случае точки останова мне нужно сначала добраться до нее, выполнив n N, где N - большое число, чтобы цикл работал над точкой останова внутри, пока не произойдут такие значения переменных, что SIGFPE не будет выдан. После выполнения обработки или точки останова я теряю переменные фрейма, поэтому не могу выполнить обратный поиск и дальнейшую отладку программы (переменная вне контекста).

Как быстро обработать SIGFPE в цикле?

Спасибо!

Новая информация: возможно ли остановить программу с помощью логической точки наблюдения? Я вошел в ответственный кадр и обнаружил, что рассматриваемая переменная достигает значения 350 (оно должно быть намного меньше нуля). Почему не

watch x0 > 100

остановить исполнение на этом этапе?

1 Ответ

3 голосов
/ 05 июля 2011

Вы используете watch неправильно.

http://www.ofb.net/gnu/gdb/gdb_30.html#SEC30

watch expr

Установить точку наблюдения для выражения. GDB прервется, когда программа запишет expr и его значение изменится.

Итак, вы не можете смотреть x0>100, но можете наблюдать x0 или array[59] (аргумент наблюдения - это адрес в памяти)

Для вашей задачи вы можете использовать условный перерыв. http://www.ofb.net/gnu/gdb/gdb_29.html#SEC29

break ... if cond

Установить точку останова с условием cond; вычисляйте выражение cond каждый раз, когда достигается точка останова, и останавливайте его, только если значение отлично от нуля, то есть если cond оценивается как true. `... 'обозначает один из возможных аргументов, описанных выше (или без аргумента), указывающий, где нужно разбить. Смотрите раздел Условия останова, для получения дополнительной информации об условиях останова.

Итак

break main.c:345 if x0>100
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...