Я использую отладочный модуль qemu + gdb linux. когда я подключаю кгдб. Я использую gdb cmd "add-symbol-file" для добавления информации о модуле. После этого cmd. Я использую GDB "список" CMD может искать код. После того, как я делаю точку останова, я использую «list» cmd не может получить код. Когда ядро запускает точку останова, будет выводиться сообщение «Пошаговое выполнение до выхода из функции lite_fs_readdir, у которой нет информации о номере строки».
Linux версия ядра: 2.6.32.7 версия gdb: GNU gdb (GDB) Красный Hat Enterprise Linux (7.2-92.el6)
gdb output
(gdb) add-symbol-file /root/Learn-master/fs/litefs/lite_fs.ko 0xffffffffa0417000 -s
enter code here
.data 0xffffffffa0418e80 -s .bss 0xffffffffa04194e0
add symbol table from file "/root/Learn-master/fs/litefs/lite_fs.ko" at
.text_addr = 0xffffffffa0417000
.data_addr = 0xffffffffa0418e80
.bss_addr = 0xffffffffa04194e0
(y or n) y
Reading symbols from /root/Learn-master/fs/litefs/lite_fs.ko...done.
(gdb) l lite_fs_readdir
76 }
77 return last_byte;
78 }
79
80 static int lite_fs_readdir(struct file *filp, void *dirent, filldir_t filldir)
81 {
82 loff_t pos = filp->f_pos;
83 struct inode *inode = filp->f_path.dentry->d_inode;
84 //struct super_block *sb = inode->i_sb;
85 unsigned int offset = pos & ~PAGE_CACHE_MASK;
(gdb) b lite_fs_readdir
Breakpoint 1 at 0xffffffffa04176d4 (2 locations)
(gdb) l lite_fs_readdir
No line number known for lite_fs_readdir.
(gdb)c
Breakpoint 1, 0xffffffffa04176d4 in lite_fs_readdir ()
(gdb) n
Single stepping until exit from function lite_fs_readdir,
which has no line number information.