C语言,函数调用过程
来源:百度知道 编辑:UC知道 时间:2024/09/12 21:10:24
比如说我有一个程序,我想看一下它的每一次函数调用过程。
如果说:
int main()
{
int i;
double fun1(void);
double fun2(void);
for (i=0;i<3;i++)
{
fun1();
fun2();
}
fun1();
return 0;
}
我想得到它的函数调用过程,并将这个调用过程生成文件。
生成文件的形如:
main
fun1
fun2
fun1
fun2
fun1
fun2
fun1
当然可以用单步根踪等方法,不过程序一大,单步就很累。
有没有什么软件,gdb可以看栈的情况,不过我不知道它能否生成这个过程文件。
回答满意,加到最高分。
谢谢。
前三个回答,用宏是不错的选择。
由于我的程序体很大,估计自行添加的话,也很麻烦。
还有没有其它更好的方法。
如果说:
int main()
{
int i;
double fun1(void);
double fun2(void);
for (i=0;i<3;i++)
{
fun1();
fun2();
}
fun1();
return 0;
}
我想得到它的函数调用过程,并将这个调用过程生成文件。
生成文件的形如:
main
fun1
fun2
fun1
fun2
fun1
fun2
fun1
当然可以用单步根踪等方法,不过程序一大,单步就很累。
有没有什么软件,gdb可以看栈的情况,不过我不知道它能否生成这个过程文件。
回答满意,加到最高分。
谢谢。
前三个回答,用宏是不错的选择。
由于我的程序体很大,估计自行添加的话,也很麻烦。
还有没有其它更好的方法。
这个说简单也很简单把, 写个宏 #define D printf(__FUNCTION__ "\n")
然后每个函数数据声明完了就加一句 D; 就可以了
FILE *fp=fopen("text.txt","w");
int main()
{
int i;
char *f="main";
fprintf(fp,"%s\n",f);
double fun1(void);
double fun2(void);
for (i=0;i<3;i++)
{
fun1();
fun2();
}
fun1();
fclose(fp);
return 0;
}
double fun1(void)
{
char *f="fun1";
fprintf(fp,"%s\n",f);
return 0;
}
double fun2(void)
{
char *f="fun2";
fprintf(fp,"%s\n",f);
return 0;
}
我在VB里可以在每个函数里添条debug.print ....
C++里想也可以在每个被调用的函数里调用一个函数,这个函数作用就是往某个文件写入相关信息,不就OK乐~
ollydbg逆向专用