Что происходит, когда в linux возникает segfault

Они действительны, и вы можете их использовать, но да, есть недостатки.

  • Точка часто используется в регулярных выражениях для обозначения одного символа.

  • Точка в именах файлов часто используется как стандартный разделитель между именем файла и расширениями.

  • Точка в начале имени файла используется для обозначения конфигурации и / или скрытых файлов.

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

2
02.05.2019, 14:01
2 ответа
  1. arch/x86/kernel/idt.c :152-page_faultиспользуется в IDT
  2. arch/x86/entry/entry _64.S :1143-page_faultопределяется как функция-оболочка для do_page_fault(), реализованная с помощью макросаidtentry
  3. arch/x86/запись/запись _64.S :847-idtentryмакрос
  4. арка/x86/мм/разлом.c :1562-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. Используя Эликсир , который мне очень нравится :-).

3
27.01.2020, 21:58

Пользовательское пространство управляется и управляется ядром, поэтому, если внутри пользовательского пространства произойдет ошибка сегментации на уровне ядра, это повлияет на ядро.

Каждая система будет вести себя по-разному в зависимости от настройки журнала, настройки ядра и от того, использует ли она systemd или нет (, но dmesg обычно является основным местом отладки/журнала)

В вашей конкретной ситуации, если вы знаете, какой процесс генерирует segfault, вы используете straceили gdb appnameдля отладки проблемного процесса.

https://wiki.archlinux.org/index.php/Step-by-step_debugging_guideв этом руководстве содержится более подробная информация об отладке segfault

1
27.01.2020, 21:58

Теги

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