Как отслеживать ресурсы, необходимые для установки точек наблюдения в GDB? - PullRequest
2 голосов
/ 24 октября 2011

На x86 GDB использует некоторые специальные аппаратные ресурсы (регистры отладки?) Для установки точек наблюдения.В некоторых ситуациях, когда этих ресурсов недостаточно, GDB устанавливает точку наблюдения, но она не работает.Есть ли способ программно контролировать доступность этих ресурсов в Linux?Может быть, какая-то информация в procfs или что-то.Мне нужна эта информация, чтобы выбрать машину в пуле для отладки.

Из внутренних данных GDB:"Поскольку они зависят от аппаратных ресурсов, количество аппаратных точек останова может быть ограничено; когда пользователь запрашивает больше, gdb начнет пытаться устанавливать программные точки останова. (На некоторых архитектурах, особенно 32-битных платформах x86, gdb не всегда может знать, достаточно ли аппаратных ресурсов для вставки всех аппаратных точек останова и точек наблюдения. На этих платформах gdb выводит сообщение об ошибкетолько когда отлаживаемая программа продолжается.) "

" Запрошено слишком много разных точек наблюдения. (На некоторых архитектурах эту ситуацию невозможно обнаружить, пока не будет возобновлена ​​отлаженная программа.) Обратите внимание, что используются регистры отладки x86как для аппаратных точек останова, так и для точек наблюдения, поэтому установка слишком большого количества аппаратных точек останова может привести к сбою вставки точки наблюдения. "

" 32-разрядные процессоры Intel x86 оснащены специальными отладочными регистрами, разработанными для облегчения отладки. gdb prпредоставляет общую библиотеку функций, которую порты на базе x86 могут использовать для реализации поддержки точек наблюдения и аппаратных точек останова. "

1 Ответ

1 голос
/ 25 октября 2011

Мне нужна эта информация, чтобы выбрать машину в пуле для отладки.

Нет, нет. Регистры отладки x86 (их 4) - это ресурсы для каждого процесса, а не для компьютера [1]. Вы можете иметь до 4 аппаратных точек наблюдения для каждого процесса, который вы отлаживаете. Если кто-то еще отлаживает на той же машине, вы не будете мешать друг другу.

[1] Точнее, регистры мультиплексируются ядром: так же, как, например, регистр EAX. Каждый процесс в системе и в самом ядре использует EAX, есть только один регистр EAX на (одноядерном) процессоре, но все это прекрасно работает благодаря магии квантования времени.

...