kgdb的详细用法就不多说了,只说说怎么调试内核模块,因为内核模块的符号地址信息并没有包含在vmlinux里,所以需要载入模块的信息:
gdb加载内核模块的命令为:
1 |
add-symbol-file FILE ADDR |
找到ADDR最直接的方法就是:在插入模块之前,在kernel/module.c中设置一个断点,因为函数module_alloc_update_bounds返回的是模块的地址:
1 |
<span style="color: #0000dd;">2097</span> ptr <span style="color: #339933;">=</span> module_alloc_update_bounds<span style="color: #009900;">(</span>mod<span style="color: #339933;">-&</span>gt<span style="color: #339933;">;</span>core_size<span style="color: #009900;">)</span><span style="color: #339933;">;</span> |
所以:
1 |
<span style="color: #c20cb9; font-weight: bold;">gdb</span> <span style="color: #000000; font-weight: bold;">&</span>gt; b kernel<span style="color: #000000; font-weight: bold;">/</span>module.c:<span style="color: #000000;">2097</span> |
这样你就可以看到模块的地址了,后面就好办了,你可以在模块里的任意函数设断点了。
转载请注明:爱开源 » kgdb调试内核模块