2015-12-13 6 views
2

Я использую gdb с bochs-gdb для отладки реализации виртуальной памяти, которую я пишу. Каждый раз, когда исключение 14 (ошибка страницы) вызывается gdb-перерывами для обработчика исключения. Есть ли способ отключить это поведение, чтобы gdb не прерывал исключения x86?Отключить разрыв GDB по исключениям x86

ответ

2

Вы можете:

handle SIGSEGV nostop 

GDB не остановитесь на страничную ошибку, но по-прежнему выводится сообщение. Вы также можете добавить noprint.

. Источник:

«Если вы не хотите, чтобы остановить GDB для страничных ошибок, а затем выполнить команду ручки SIGSEGV nostop GDB будет по-прежнему выводится сообщение для каждой неисправности страницы , но это будет не возвращайтесь к командной строке ". link

+0

Это похоже на шаг в правильном направлении, но ваше предложение не работает. Это не segfault, который я испытываю (что вызывает sigsegv для отправки) его * * ошибка страницы *. – Jon

+0

@Jon Это проводное соединение, я думал, что ошибка страницы приводит к ошибкам сегментации, и связанная страница подтверждает мою мысль. Однако, это не так. Поиск вокруг кажется, что «ошибки страницы могут привести к ошибке сегментации или ошибке шины» (а может быть, и в других сигналах?). Вы можете попробовать обработать SIGBUS вместо SIGSEGV. –

+1

@Jon и terence: segfault - это один вид сбоя страницы: ссылка на память на виртуальный адрес, который отсутствует в таблице страниц. Однако segfault (т. Е. Ядро, поставляющее SIGSEGV) происходит только тогда, когда ядро ​​решает, что виртуальный адрес * не должен * быть добавлен в таблицу страниц процесса. Другие виды сбоев страниц обрабатываются одним из: пейджинга на странице с диска, выполняющего фактическую копию части общей памяти для копирования на запись (что-то еще забываю). Таким образом, ответ, который вам нужен, будет специфичным для bochs-gdb. –