我已经在启用以下内核选项的情况下编译了我的内核。这应该足够了。
CONFIG_KGDB=y
CONFIG_KGDB_SERIAL_CONSOLE=y
CONFIG_DEBUG_INFO=y
我想在内核空间下实现一个tcp socket server。然而,当我调试我的内核时,gdb 似乎无法识别函数符号。显示问号。
#0 0xffffffffb92ef58a in ?? ()
#1 0xffffffffb92ef6dd in ?? ()
#2 0xffffb4a640c73c38 in ?? ()
#3 0xffff9b0c275587c0 in ?? ()
#4 0xffff9b0c5c9fbc00 in ?? ()
#5 0xffff9b0c7c3ec480 in ?? ()
#6 0xffffffffc063d000 in ?? ()
#7 0xffffffffc063b22e in myserver ()
at /home/river/Desktop/kernel-sock/server.c:75
#8 0xffffffffc063b285 in server_init ()
at /home/river/Desktop/kernel-sock/server.c:88
#9 0xffffffffb8e0218e in ?? ()
#10 0xffff9b0c7ffeb5c0 in ?? ()
#11 0x000000000000001f in ?? ()
#12 0x85ce74a569aec8a5 in ?? ()
当前内核版本为 4.9.82。
最佳答案
我禁用了 CONFIG_DEBUG_RODATA
和 CONFIG_RANDOMIZE_BASE .
CONFIG_RANDOMIZE_MEMORY
随机化内存段的虚拟地址,包括物理内存映射、vmalloc 和 vemmap。
我认为内存地址随机化是关键。
关于linux - 为什么在调试 vmlinux 时 kgdb 不显示函数符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49754111/