gpt4 book ai didi

c - C中的函数调用顺序

转载 作者:太空宇宙 更新时间:2023-11-04 05:10:50 25 4
gpt4 key购买 nike

我想查看如下所示的基本程序的代码流程。

#include<stdio.h>
int main ()
{
FILE *fptr = fopen("/mnt/myfilesystem/test.txt", "r");
if(fptr) {
printf("open successful\n");
fclose(fptr);
}
else
printf("open failed\n");

return 0;
}

我想查看此程序运行时执行的函数调用的完整序列。我尝试使用 strace 和 ptrace,但它们只列出了系统调用 :(关于如何做到这一点有什么建议吗?

提前致谢!!

最佳答案

您可以使用 gnu profiler gprof .

使用 -pg 标志编译它(main.cc):

gcc -pg main.cc -o main

然后执行它(./main)。您的二进制文件将生成一个文件 (gmon.out)。然后你可以使用 gprof 获取跟踪:

gprof main gmon.out

用你的例子我得到:

index % time    self  children    called     name
0.00 0.00 1/1 __do_global_ctors_aux [9]
[7] 0.0 0.00 0.00 1 global constructors keyed to main [7]
0.00 0.00 1/1 __static_initialization_and_destruction_0(int, int) [8]
-----------------------------------------------
0.00 0.00 1/1 global constructors keyed to main [7]
[8] 0.0 0.00 0.00 1 __static_initialization_and_destruction_0(int, int) [8]

这不是太多信息,因为您的应用程序并不复杂。

如果你想跟踪系统调用,试试strace ./main。输出很长,你会看到所有的系统调用:

execve("", [""], [/* 26 vars */]) = 0
brk(0) = 0x877f000
access("", F_OK) = -1 ENOENT
mmap2(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7748000
access("", R_OK) = -1 ENOENT
open("", O_RDONLY) = -1 ENOENT
open("", O_RDONLY) = -1 ENOENT
stat64("", 0xbfdc4a18) = -1 ENOENT
open("", O_RDONLY) = -1 ENOENT
stat64("", {st_mode=S_IFDIR|0755, st_size=6104, ...}) = 0
open("", O_RDONLY) = -1 ENOENT
open("", O_RDONLY) = 3
....

关于c - C中的函数调用顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9745831/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com