Почему отладка в режиме ядра затруднена? - PullRequest
1 голос
/ 05 января 2012

Я понимаю назначение как режима ядра, так и режима пользователя, и как происходит переход от первого к последнему.Тем не менее, многие источники утверждают, что сбой, происходящий в режиме ядра, трудно отладить, и что это должно быть сделано удаленно, например, путем соединения через telnet ( здесь пример ).

Почемуэто так сложно отлаживать?Почему вы не можете просто присоединить отладчик (ядра) к одному из потоков ядра и использовать его обычным способом?

Ответы [ 2 ]

4 голосов
/ 05 января 2012

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

В обычной отладке у вас есть два полностью изолированных процесса - отладчик и то, что вы отлаживаете.Они "сверстники", созданные равными.Отлаживаемый процесс не может касаться отладчика, независимо от того, что он делает (и, вероятно, даже не знает, что он существует).С другой стороны, отладчик может взаимодействовать с отлаживаемым процессом фиксированными, предсказуемыми способами, которые всегда применимы ко всем обычным пользовательским процессам.

Пример: как бы вы отлаживали интерфейс клавиатуры, если это локальная отладка, иликод RS232, если это через последовательный порт?Драйвер сетевого адаптера или сетевой стек, если он подключен к сети?Установка точки останова в одном из них будет невосстановимой, поскольку вы потеряете доступ к устройству, управляющему отладчиком.В худшем случае, как бы вы отлаживали отладчик ядра?С GDB вы можете, по крайней мере, теоретически присоединить экземпляр GDB к другому экземпляру GDB без особых проблем.В пространстве ядра это просто невозможно, потому что нет уровня выше, чтобы опосредовать вещи.

0 голосов
/ 10 января 2012

Вы не можете отлаживать ядро ​​в интерактивном режиме (или локально), потому что само ядро ​​отвечает даже за отображение изображения на мониторе (посредством связи с соответствующим драйвером дисплея) и не только.Я бы поставил ваш вопрос по-другому: возможно ли отладить ядро ​​проще, чем при подключении через telnet?

На этот вопрос мой ответ: да, это так.По крайней мере, на архитектурах X86 / X64 с использованием виртуализации.Я использую VirtualBox для запуска гостевой ОС, которую я могу отлаживать на моей локальной машине.Я также использую VirtualKD (http://virtualkd.sysprogs.org/), который значительно ускоряет связь между отладочной машиной (хостом) и виртуальной машиной.

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

...