问题描述
我正在寻找一种方法来跟踪在 gem5 模拟器上运行应用程序时调用的所有函数。例如,有这样的代码test.c:
#include <stdio.h>
int main(){
FILE *fp;
char c[] = "hello";
char buffer[100];
fp = fopen("Working.txt","w+");
fwrite(c,1,5,fp);
fseek(fp,SEEK_SET);
fread(buffer,fp);
printf("%s \n",buffer);
fclose(fp);
return(0);
}
我将其编译为二进制文件,我基本上想跟踪使用 fopen,fwrite,fseek,fread,printf,fclose,and return
时调用的所有函数。
以fread
为例,如果fread() -> foo() -> bar() -> bar2() ... -> do_syscall_64()
,是最后调用syscall的函数调用流程,我想跟踪所有这些函数。
我已经尝试使用 --debug-flags
选项(例如命令:build/X86/gem5.opt --debug-flags=Stack --debug-file=test_Stack.out configs/example/se.py --cpu-type=DerivO3cpu --caches --mem-type=DDR4_2400_8x8 --mem-size=8GB --cmd=./test
)使用 gem5 的调试模式,并尝试了一堆标志,包括 SyscallAll
、Stack
和Stackdist
。
虽然 SyscallAll
标志仅打印在第 N 个刻度处调用的系统调用,但其他两个调试标志根本不打印任何内容。
我在那里做错了吗?甚至有没有办法在 gem5 中打印用户调用堆栈?或者我可以做一个自定义实现吗?任何帮助表示赞赏。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)