概述
在学习systemtap过程中使用show_trace,这个函数在/proc/kallsyms中存在,表示这是个有效的函数,用systemtap执行时候报错unkown symbol in module,用dmesg看错误比较明显Unkown symbol show_stack,显然说明这个函数没有导出,导出的符号表存在那里呢,看一下内核源码中的modules.txt,导出的符号表文件为Module.symvers 。具体路径在/lib/moudules/`uname -r`/Module.symvers),
那systemtap到那里查找内核的调试符号呢?在http://sourceware.org/systemtap/man/stappaths.7.html上面有说明,一般在/usr/lib/debug/lib/modules/$(uname -r)/,SYSTEMTAP_DEBUGINFO_PATH 这个环境变量可以改写上面的地址。
默认,systemtap查找vmlinux调试信息的路径为
/boot/vmlinux-`uname -r`
/lib/modules/`uname -r`/vmlinux
/lib/modules/`uname -r`/vmlinux.debug
/lib/modules/`uname -r`/build/vmlinux
/lib/modules/`uname -r`/.debug/vmlinux.debug
/usr/lib/debug/lib/modules/`uname -r`/vmlinux.debug
/var/cache/abrt-di/usr/debug/lib/modules/`uname -r`/
/var/cache/abrt-di/usr/lib/debug/lib/modules/`uname -r`/vmlinux.debug
stap -l 'kernel.function("*")' 列出的是调试信息中的所有函数,包括上面的show_stack。表明show_stack可以设置跟踪点,但因为没有导出,不可以在模块中调用。
用strace跟踪程序的执行过程,很多时候也可以知道具体的原因。
最后
以上就是要减肥酒窝为你收集整理的systemtap学习笔记的全部内容,希望文章能够帮你解决systemtap学习笔记所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复