内核调试
18279216400
这个作者很懒,什么都没留下…
展开
-
perf-火焰图
火焰图使用步骤:1)解压FlameGraph-master.zip2)将FlameGraph-master目录绝对路径写入fg.sh中的FG_DIR中;3)在火焰图中添加export语句,将UB_BINDIR设置为环境变量,如右图所示,设置为execl所在绝对目录;4)抓取execl进程运行时的火焰图:sudo ./fs.sh /home/uos/UnixBench/pgms/execl 35) 将生成的out_2481.svg文件放入浏览器查看;...原创 2021-07-28 21:14:26 · 292 阅读 · 0 评论 -
ftrace-统计函数时间
a)设置trace跟踪器echo function_graph > /sys/kernel/debug/tracing/current_tracer查看可用的跟踪器:cat /sys/kernel/debug/tracing/available_tracershwlat blk mmiotrace function_graph wakeup_dl wakeup_rt wakeup function nopb)设置最大跟踪深度,可以避免内部函数嵌套太多,设置为1时只跟踪函数本身echo 2原创 2021-07-28 21:06:27 · 580 阅读 · 0 评论 -
bpf-结合gdb打印结构体信息
1)5.904616 8824 8824 trace-bpfcc register_kprobe p=0xffff802775f4f0102)Sudo gdb vmlinux /proc/kcore(gdb) p *(struct kprobe*)0xffff802775f4f010$2 = {hlist = {next = 0x0, pprev = 0xffff000009a3a998 <kprobe_table+344>}, list = { next =原创 2021-07-28 20:57:31 · 216 阅读 · 0 评论 -
bpf-统计函数执行时间
#!/usr/bin/bpftraceBEGIN{printf("begin stat io pid=%d\n",$1);}kprobe:vfs_read/pid==$1/{@read_nsecs=nsecs;@read_nrs = @read_nrs + 1;}kretprobe:vfs_read/@read_nsecs !=0/{if (pid==$1){@total_read_nsecs = @total_read_nsecs + (nsecs - @read_nsec原创 2021-07-28 20:51:53 · 561 阅读 · 0 评论 -
bpf-查找回调函数
1)sudo trace-bpfcc -t 'submit_bio(struct bio *bio) "func=0x%lx",bio->bi_disk->queue->make_request_fn2)func=0xffff000008478e183)sudo cat /proc/kallsyms |grep ffff000008478e18原创 2021-07-28 20:51:21 · 89 阅读 · 0 评论 -
bpf-跟踪函数
通过bpf确认内存申请 1 #include<stdio.h> 2 #include<string.h> 3 int main(void) 4 { 5 int len = 1024*1024; 6 char *buf; 7 printf("pid=%d\n", getpid()); 8 getchar(); 9 malloc(len);原创 2021-07-28 20:46:02 · 215 阅读 · 0 评论 -
gdb调试-函数调用
1:代码 1 #include <string.h> 2 #include <stdio.h> 3 #include <fcntl.h> 4 5 int main(voi原创 2021-07-13 21:09:15 · 188 阅读 · 0 评论 -
gdb调试-修改变量控制流程
1:代码 1 #include <string.h> 2 3 void test3() 4 { 5 int which = 0; 6 7 char acBuf[12]; 8 if ( 0 == which) 9 memcpy(acBuf, "123456", 10); 10 else 11 strcpy(0, "abcdefg"); 12 } 13 14 void test2()原创 2021-07-13 20:57:53 · 189 阅读 · 0 评论 -
gdb调试-段错误
1:代码 1 #include <string.h> 2 3 void test3() 4 { 5 char acBuf[12]; 6 memcpy(acBuf, "123456", 10); 7 strcpy(0, "abcdefg"); 8 } 9 10 void test2() 11 { 12 test3(); 13 } 14 15 void test1() 16 { 17 test2();原创 2021-07-13 20:47:04 · 147 阅读 · 0 评论 -
gbd调试-命令
原创 2021-07-13 20:36:59 · 111 阅读 · 0 评论 -
内核调试-目录
在系统的学习了前面的linux 0.11和linux 4.9以后,已经对整个操作系统有了大概的了解。现在缺乏的是更快的解决工作中遇到问题的能力。工欲善其事,必先利其器。接下来学习定位问题的工具和方法。1:环境搭建2:ftrance3:system tap4:内存检测5:死锁6:debug方法...原创 2020-05-06 15:31:58 · 101 阅读 · 0 评论