有没有办法跟踪在 gem5 上运行的应用程序的调用堆栈?

时间:2021-07-18 16:24:47

标签: c debugging simulation callstack 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,0,SEEK_SET);
    fread(buffer, 1, 5, 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 中打印用户调用堆栈?或者我可以做一个自定义实现吗?任何帮助表示赞赏。

0 个答案:

没有答案
相关问题