有没有办法跟踪在 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 的调试模式,并尝试了一堆标志,包括 SyscallAllStackStackdist

虽然 SyscallAll 标志仅打印在第 N 个刻度处调用的系统调用,但其他两个调试标志根本不打印任何内容

我在那里做错了吗?甚至有没有办法在 gem5 中打印用户调用堆栈?或者我可以做一个自定义实现吗?任何帮助表示赞赏。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)