如何解决有没有办法跟踪在 gem5 上运行的应用程序的调用堆栈?
我正在寻找一种方法来跟踪在 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 举报,一经查实,本站将立刻删除。