Почему в моем vmlinux нет отладочных символов при использовании gdb с/proc/kcore?

Я настроил все связанные с CONFIG_DEBUG_ параметры y, но когда я пытаюсь отладить ядро, он говорит, что не найдены символы отладки:

gdb /usr/src/linux-2.6.32.9/vmlinux /proc/kcore

Reading symbols from /usr/src/linux-2.6.32.9/vmlinux...(no debugging symbols found)...done.

Почему?

Ответ 1

Вот моя лучшая догадка: я не знаю, и это не имеет значения.

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

Изменить: Основываясь на ваших комментариях к вопросу, похоже, что вы искали неправильный символ с вашим отладчиком. Обработчики системных вызовов начинаются с префикса sys_, но вы не можете сказать, глядя на код. Макрос SYSCALL_DEFINE4(ptrace, ...) просто заканчивает объявление функции как asmlinkage long sys_ptrace(...), хотя он делает некоторые другие сумасшедшие вещи, если у вас есть ftrace.

Ответ 2

make menuconfig- > hacking ядра → [] Отладка ядра → [] Скомпилировать ядро ​​с информацией об отладке (CONFIG_DEBUG_INFO)

Ответ 3

Возможно, я ошибаюсь, но я подумал, что вам нужно будет установить пакет debuginfo для вашего ядра, чтобы получить символы

Ответ 4

Добавить -g в переменную CFLAGS в ядре Makefile

Ответ 5

Также возможно, когда вы упаковываете изображение vmlinuz, символы отладки были удалены (при использовании make-kpkg для сборки deb-пакета для ядра Linux). Таким образом, вы должны использовать встроенный файл vmlinux под вашим исходным деревом Linux, чтобы иметь эти символы отладки.