Аппаратная очень медленная контрольная точка GDB - почему?

На большом приложении C я установил аппаратную контрольную точку на адресе памяти следующим образом:

(gdb) watch *0x12F5D58
Hardware watchpoint 3: *0x12F5D58

Как Вы видите, это - аппаратная контрольная точка, не программное обеспечение, которое объяснило бы замедление.

Теперь время выполнения приложения под отладчиком изменилось меньше чем с десяти секунд до одного часа и подсчета. Контрольная точка инициировала три раза до сих пор, в первый раз после 15 минут, когда страница памяти, содержащая адрес, была сделана читаемой sbrk. Конечно, в течение тех 15 минут контрольная точка должна была быть эффективной, так как страница памяти была недоступна? И это все еще не объясняет, почему это настолько медленно впоследствии.

Платформа является x86_64, и версии GDB являются пакетом Ubuntu 9.10:

$ gdb --version
GNU gdb (GDB) 7.0-ubuntu
[...]

и запас GDB 7.1 создал из источников:

$ gdb-7.1 --version
GNU gdb (GDB) 7.1

Заранее спасибо за какие-либо идеи как, какова могла бы быть причина или как фиксировать/работать вокруг этого.

Править: удаленный бросок

Править: gdb 7.1

13
задан Laurynas Biveinis 24 March 2010 в 12:20
поделиться

2 ответа

У меня действительно были проблемы с аппаратными точками наблюдения в GDB 7.xx, что неприемлемо, поскольку точки наблюдения необходимы в моей работе.

По совету коллеги я загрузил исходный код для 6.7.1 и собрал его локально. Точки наблюдения теперь работают намного лучше.

Возможно, стоит попробовать.

5
ответ дан 1 December 2019 в 23:14
поделиться

Скорее всего, потому, что вы каждый раз разыгрываете его. Попробуйте следующее:

(gdb) watch *0x12F5D58

Другой вариант - у вас установлено слишком много аппаратных точек наблюдения, поэтому GDB вынужден использовать программные точки наблюдения. Попробуйте проверить, сколько точек наблюдения вы используете:

(gdb) info break

и посмотрите, можно ли отключить некоторые точки наблюдения.

5
ответ дан 1 December 2019 в 23:14
поделиться
Другие вопросы по тегам:

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