用strace定位bug
背景
今年年初(2021年我的学习计划)我就计划补一下”操作系统”这门计算机专业课.
最近我就在学一门网课,是极客时间的操作系统实战 45 讲,感觉还可以:代码量是1w行多点,课程我就把它当做一个45讲的代码说明文档。
网上也有一些类似的”实验教学”,比如:
目前我学习操作系统实战有两个学习目标:
本文记录我在学习时遇到的第一个小问题:编译”第十三课的代码”时遇到一个报错
问题解决思路:
- 搞清楚”编译器”去哪里找”kernel.inc”文件
分析过程
最简便的方法找到”kernel.inc”文件位置
strace -f可以跟踪子进程的系统调用
1
2
3
4
5
6
7
8
9
10
11[root@instance-fj5pftdp Cosmos]# strace -f make 2>/tmp/q.txt
[root@instance-fj5pftdp Cosmos]# cat /tmp/q.txt
...
[pid 20451] open("kernel.inc", O_RDONLY) = -1 ENOENT (没有那个文件或目录)
[pid 20451] open("../includekernel.inc", O_RDONLY) = -1 ENOENT (没有那个文件或目录)
[pid 20451] open("../include/bastypeinckernel.inc", O_RDONLY) = -1 ENOENT (没有那个文件或目录)
[pid 20451] open("../include/halinckernel.inc", O_RDONLY) = -1 ENOENT (没有那个文件或目录)
[pid 20451] open("../include/knlinckernel.inc", O_RDONLY) = -1 ENOENT (没有那个文件或目录)
[pid 20451] open("../include/libinckernel.inc", O_RDONLY) = -1 ENOENT (没有那个文件或目录)
[pid 20451] open("../include/drvinckernel.inc", O_RDONLY) = -1 ENOENT (没有那个文件或目录)
[pid 20451] write(2, "../hal/x86/kernel.asm:6: ", 25../hal/x86/kernel.asm:6: ) = 25可以发现
../includekernel.inc
等路径少了一个/
符号修改后,就编译成功了
总结
strace -f
真香:不需要我去研究”代码”或者”编译器”是怎么包含”kernel.inc文件”。