GDB: команда lx-symbols undefined

Я следую приведенному ниже руководству: https://www.kernel.org/doc/Documentation/gdb-kernel-debugging.txt

Когда я пытаюсь загрузить символы модуля, используя следующую команду: (gdb) lx-symbols

gdb говорит, что команда не определена. Как добавить эту вспомогательную команду в gdb?

информация gdb: gdb-7.6.1-51.el7.x86-64 на Centos 7.0


person Chu Bun    schedule 17.03.2015    source источник
comment
что показывает (gdb) apropos lx   -  person Milind Dumbare    schedule 17.03.2015


Ответы (3)


Вы должны получить последние исходные коды ядра (может быть 4.0-rc4) или сделать резервную копию патча. В основном посмотрите, есть ли у вас каталог script/gdb/, например это в исходниках вашего ядра. Потому что именно там вы получаете эти сценарии.

Затем выполните шаги, указанные в https://www.kernel.org/doc/Documentation/dev-tools/gdb-kernel-debugging.rst

person Milind Dumbare    schedule 17.03.2015
comment
Я использовал «git», чтобы получить исходный код ядра с git://git.kiszka.org/linux.git. Там был каталог script/gdb. Проверено, что CONFIG_GDB_SCRIPTS и CONFIG_KGDB и другие флаги DBG были установлены в .config . Скомпилировал и установил новое ядро. Я прочитал Makefile и там была ссылка на скрипт vmlinux-gdb.py. Однако я не могу найти этот скрипт нигде в новом ядре. Он остается в дереве исходного кода сборки. Как проверить, правильно ли сделана моя сборка? - person Chu Bun; 19.03.2015
comment
Разве это не в дереве исходного кода сборки в scripts/gdb/ - person Milind Dumbare; 19.03.2015
comment
Да, vmlinux-gdb.py есть в дереве исходников сборки. Могу ли я вручную скопировать его в новое дерево ядра? - person Chu Bun; 23.03.2015
comment
Какое новое ядро. Вы упомянули, что нашли каталог scripts/. Я уже упоминал, что если вы не видите этот код в патче, вам придется его бэкпортировать. Да, вы можете попробовать скопировать каталог scripts/gdb/. Вы только что понизили мой ответ? - person Milind Dumbare; 23.03.2015
comment
Нет, я не голосовал против (у меня в любом случае недостаточно баллов, чтобы проголосовать). - person Chu Bun; 27.03.2015
comment
Исходный код ядра получен непосредственно от автора веб-сайта патча. Итак, script/gdb есть. Затем я скомпилировал и установил это ядро ​​(новое ядро) на целевой компьютер (виртуальную машину, на которой работает хост-компьютер). Нужно ли мне также устанавливать исправленное ядро ​​на хост-компьютер? - person Chu Bun; 27.03.2015
comment
Я не понимаю, зачем вам скрипты на целевой машине? Разве эти скрипты не должны что-то делать с каталогом сборки. Посмотрите на эти два шага, где вы cd /path/to/linux-build, а затем Start gdb: gdb vmlinux. Это должно произойти там, где вы построили исходники. - person Milind Dumbare; 28.03.2015
comment
Вот шаги, которые я сделал: - Загрузите исходный код ядра с патчем. - Скомпилируйте исходный код ядра. - Загрузите его на компьютер VM. - Запустите компьютер ВМ. - Запустите gdb vmlinux на хост-компьютере. - person Chu Bun; 02.04.2015
comment
- gdb останавливается в точке останова. - ввести lx-символы и получить команду не найдено. и да, исходный код ядра содержит папку script/gdb (последний ее снимок). - person Chu Bun; 02.04.2015
comment
Я использовал команду gdb info auto-load python-scripts, чтобы убедиться, что скрипт не загружен. Символическая ссылка сценария в каталоге верхнего уровня была нарушена, потому что я скопировал каталог сборки с виртуальной машины на свой хост в другом месте, а символическая ссылка на самом деле является абсолютным путем, а не относительным. Исправление символической ссылки с помощью ln -sf scripts/gdb/vmlinux-gdb.py и перезагрузка gdb устранили проблему для меня. - person fgiraldeau; 14.04.2016

add-auto-load-safe-path

Применение:

gdb -ex add-auto-load-safe-path /path/to/linux/kernel/source/root

Теперь скрипты GDB загружаются автоматически, и lx-symbols доступен.

Вот минимальный полностью автоматизированный пример Buildroot + QEMU с подробным инструкции.

person Ciro Santilli 新疆再教育营六四事件ۍ    schedule 21.05.2017

Я также столкнулся с подобной проблемой. В моем случае проблема возникла из-за того, что я не установил безопасный путь для автоматической загрузки на ../scripts/gdb/vmlinux-gdb.py. поэтому я создал файл ~/.gdbinit, добавленный

add-auto-load-safe-path path/to/linux/kernel/tree/scripts/gdb/vmlinux-gdb.py
person F.A. SULAIMAN    schedule 23.06.2021