Сеанс отладки зависает при попытке просмотра массива

Я использую убунту 12.04. До сих пор я использовал anjuta и codelite в качестве IDE для школьных проектов C++. Однако с обоими я столкнулся с одной проблемой: после запуска отладчика все работает нормально, пока я не пытаюсь добавить массив в раздел часов. Он ничего не отображает, и когда я пытаюсь продолжить отладку, он зависает, и мне приходится останавливать сеанс отладки. Я должен упомянуть, что наблюдение за переменными работает хорошо.

Спасибо,

Л.Э.: На самом деле функция отладки зависает только в случае больших массивов... тогда это может быть баг codelite. Есть мнение?


person Popa Mihai    schedule 14.09.2012    source источник


Ответы (1)


Я должен упомянуть, что наблюдение за переменными работает хорошо.

Когда вы устанавливаете точку наблюдения для переменной, GDB, вероятно, говорит Hardware watchpoint N (но ваша IDE может скрывать это сообщение).

Когда вы устанавливаете точку наблюдения для чего-либо размером более 8 байт на процессоре x86, GDB не может установить аппаратную точку наблюдения (поскольку аппаратное обеспечение x86 не поддерживает такие точки наблюдения). Вместо этого GDB устанавливает программную точку наблюдения. Программные точки наблюдения реализованы следующим образом:

  1. пошаговая программа
  2. изменились ценности? Нет -> перейти к шагу 1. Да: стоп.

Программные точки наблюдения работают очень медленно. Если вы понаблюдаете за своей системой с помощью top, вы, вероятно, обнаружите, что GDB потребляет 100% ресурсов процессора.

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

person Employed Russian    schedule 14.09.2012
comment
Современное оборудование поддерживает просмотр максимум 16 байтов, а не слов. - person Dani; 14.09.2012
comment
Это действительно потребляет 100% ЦП, переход к следующей инструкции занимает около одной минуты. Большое тебе спасибо! - person Popa Mihai; 14.09.2012
comment
@Dani Нужна цитата. Согласно en.wikipedia.org/wiki/X86_debug_register, максимальный размер точки наблюдения составляет 8 байты; Я обновил ответ. - person Employed Russian; 14.09.2012
comment
@EmployedRussian: с этой страницы: включите условия четырех адресных точек останова, каждая точка останова ... указывает, смотрят ли они ... один (00b), два (01b), восемь (10b) или четыре (11b) байта. На самом деле это 32 байта, я не знал, что восемь существуют. - person Dani; 14.09.2012
comment
@Dani Это байты, а не слова. - person Employed Russian; 14.09.2012
comment
@EmployedRussian: 4 кадра * 8 байт = 32 байта - person Dani; 14.09.2012
comment
@Dani Одиночная аппаратная точка наблюдения GDB может просматривать до 8 байтов. Я не верю, что GDB установит 2 DRs, если вы попросите его просмотреть 16 байтов, но я могу ошибаться. - person Employed Russian; 14.09.2012