出现的小插曲
当我复制的时候,把//main.c复制进去的时候,结果是下面这样的
去掉刚刚那个注释,就能正常复制了,我猜测是不是因为//牵扯到了vim编辑器的命令,所以导致了这个错误
正文部分
书中没有说怎么打开main.s,估计按照惯性是vim main.s,我百度了一下,发现more main.s,和less main.s也能读出里面的汇编内容,不过肯定没有vim编辑器好用
关于函数堆栈调用
我在网上看到的一个头文件函数execinfo.h正好能打印函数调用堆栈,使用方法
注意事项
如果在windows的一些ide下,会出现无法找到execinfo.h头文件的错误,execinfo.h头文件在linux下,通常由glibc包提供,实验楼的环境正好可以
结合庖丁解牛的代码的最终代码如下
#include <execinfo.h>
#include <stdio.h>
#include <stdlib.h>
int g(int x)
{
void *array[10];
size_t size;
char **strings;
size_t i;
size = backtrace (array, 10);
strings = backtrace_symbols (array, size);
printf ("Obtained %zd stack frames.
", size);
for (i = 0; i < size; i++)
printf ("%s
", strings[i]);
free (strings);
return x+3;
}
int f(int x)
{
void *array[10];
size_t size;
char **strings;
size_t i;
size = backtrace (array, 10);
strings = backtrace_symbols (array, size);
printf ("Obtained %zd stack frames.
", size);
for (i = 0; i < size; i++)
printf ("%s
", strings[i]);
free (strings);
return g(x);
}
int main (void)
{
return f(8)+1;
return 0;
}
最终的结果如下
一些感受
娄老师的书庖丁解牛的第一章,有很多计算机组成原理的内容在里面,很多寄存器已经叫不出名字了,希望经过后面的学习,能做到目无全牛。