Они действительны, и вы можете их использовать, но да, есть недостатки.
Точка часто используется в регулярных выражениях для обозначения одного символа.
Точка в именах файлов часто используется как стандартный разделитель между именем файла и расширениями.
Точка в начале имени файла используется для обозначения конфигурации и / или скрытых файлов.
По этим причинам использование точек в именах файлов для других целей часто приводит к проблемам с другими функциями командной строки и другими инструментами и фреймворками, которые их не ожидают и работают некорректно.
page_fault
используется в IDT page_fault
определяется как функция-оболочка для do_page_fault()
, реализованная с помощью макросаidtentry
idtentry
макрос do_page_fault()
Как только вы достигнете do_page_fault()
,вы должны увидеть интерактивные ссылки для навигации по остальной части кода. Вы не можете сделать это для этих первых четырех шагов, потому что Эликсир не понимает магию макросов. Он также не понимает ассемблера.
Если вам нужно посмотреть какие-либо другие ловушки, некоторые из других функций-обработчиков (do_*
), в свою очередь, определяются другим макросом, x86/kernel/traps.c :281DO_ERROR()
.
Функция, регистрирующая сообщение о segfault, также неисправна.c:show _signal _msg(). Небольшая халява для вас. Эликсир вообще не позволяет искать строки, только идентификаторы. GitHub также закрыл свой поиск кода. В любом случае сложно найти эту строку формата сообщения без фактической загрузки исходного кода, потому что "%s%s[%d]: segfault at %lx ip %px sp %px error %lx"
не содержит много конкретных слов или фраз :-).
Приведенные выше ссылки ведут на конкретные номера строк исходного кода версии 5.0. Используя Эликсир , который мне очень нравится :-).
Пользовательское пространство управляется и управляется ядром, поэтому, если внутри пользовательского пространства произойдет ошибка сегментации на уровне ядра, это повлияет на ядро.
Каждая система будет вести себя по-разному в зависимости от настройки журнала, настройки ядра и от того, использует ли она systemd или нет (, но dmesg обычно является основным местом отладки/журнала)
В вашей конкретной ситуации, если вы знаете, какой процесс генерирует segfault, вы используете strace
или gdb appname
для отладки проблемного процесса.
https://wiki.archlinux.org/index.php/Step-by-step_debugging_guideв этом руководстве содержится более подробная информация об отладке segfault