2016-04-19 10 views
0

Я думаю, что название говорит все! :)Переключение между удаленным KGDB и локальным DDB в сеансе отладки

Я хотел бы знать, есть ли способ переключения между gdb и ddb при отладке удаленного ядра.

Я уже в командной строке gdb (или, скорее, kgdb). Отсюда как переключиться на локальный ddb на отладочной машине?

Мой конфигурационный файл ядра уже содержит options BREAK_TO_DEBUGGER и я ОБА GDB и DDB настроен иначе: options GDB options DDB

Согласно developer's handbook «Каждый раз, когда вы набираете GDB, режим будет переключаться между удаленным GDB и локальной DDB Чтобы немедленно заставить следующую ловушку просто набрать s (шаг), ваш хостинг GDB теперь получит контроль над целевым ядром: «

Итак, я попытался ввести« gdb »в подсказке gdb (смешно мне : D) и, как и ожидалось, это была непризнанная команда. Очевидно, что эта команда должна быть введена в командной строке ddb. Но мой вопрос: как я могу перейти на ddb из работающей машины, чьи последовательные порты (хотя и виртуальные) удаленно подключены к KGDB другого компьютера? Когда прослушивается удаленный GDB, и я заставляю панику использовать sysctl debug.kdb.enter=1, он попадает в удаленный КБДБ. Однако, когда он НЕ прослушивает, система просто зависает.

Что я хочу, это ввести ddb на локальную машину. Сделайте некоторые отладки, используя его; перейдите к удаленному KGDB для вещей, которые лучше всего делать с помощью KGDB, а затем вернитесь к локальному DDB, когда закончите.

Есть ли способ сделать это? Если да, то дайте мне знать

ответ

0

KDB содержит DDB & KDB backends, но есть много условий, когда они доступны. Чтобы проверить наличие бэкэнд, проверьте sysctl debug.kdb.available и debug.kdb.current (sys/kern/subr_kdb.c). Если оба сервера доступны, debug.kdb.available должен содержать «ddb gdb».

Возможный способ переключения между бэкендами (gdb/ddb) - сначала ввести ddb, затем вызвать gdb и выполнить отладку. Затем выйдите из gdb и вернитесь к ddb (на самом деле произойдет новая ловушка, кажется, требуется Ctrl + C). Это означает, что до паники для параметра debug.kdb.current должно быть установлено значение «ddb».

Надеюсь, это поможет.

+0

'Sysctl debug.kdb.available' дает' DDB gdb' 'Sysctl debug.kdb.current' дает' gdb' Я попытался Ctrl-C в DDB строке (когда GDB был активным) вернуть управление обратно в GDB, но безрезультатно. Если я играю с 'debug.kdb.current', могу ли я достичь своей цели? – HighOnMeat

+0

Не уверен. во времени должно быть 1 бэкэнд. Переход от DDB к GDB - это команда «gdb», переход назад - завершение gdb. –

+0

Я изменил текущий backend на ddb с помощью 'sysctl debug.kdb.current = ddb'. Затем я вызвал панику, и я был в подсказке ddb. Ввод 'gdb' здесь подключает машину к серверу gdb на клиентской машине. Однако, выйдя из gdb, я вернусь к приглашению оболочки на отлаженной машине и НЕ к ddb. Так ли это должно быть? – HighOnMeat