C 如何获取函数在调用堆栈中的位置?
为了提供一个背景,我想以一种整洁的方式基于调用堆栈直观地打印日志消息 比如说 应该将输出作为C 如何获取函数在调用堆栈中的位置?,c,linux-kernel,system-calls,glibc,backtrace,C,Linux Kernel,System Calls,Glibc,Backtrace,为了提供一个背景,我想以一种整洁的方式基于调用堆栈直观地打印日志消息 比如说 应该将输出作为 foo(){ printf("Foo was called"); bar(); } bar(){ printf("bar was called"); jai(); } jai(){ printf("Jai was called"); } <<< OUTPUT >>> Foo was called. bar was c
foo(){
printf("Foo was called");
bar();
}
bar(){
printf("bar was called");
jai();
}
jai(){
printf("Jai was called");
}
<<< OUTPUT >>>
Foo was called.
bar was called
jai was called.
foo(){
printf(“Foo被称为”);
bar();
}
bar(){
printf(“称为酒吧”);
jai();
}
jai(){
printf(“Jai被称为”);
}
>
福被叫来了。
酒吧被叫来了
贾伊被叫去了。
我不想将空格数作为参数传递给这些函数,也不想保持相同的全局计数
我在想,如果我们可以得到函数在调用堆栈中的位置,那么我们就可以在文本之前填充相同数量的空格,以获得所需的输出格式
我看到backtrace函数调用提供了返回整个堆栈名的方法。它还返回调用中函数的总数
是否有只返回位置的函数
它还返回调用中函数的总数。是否有只返回位置的函数 他们是同一个人 如果调用堆栈为:
main -> foo -> bar -> jai
你想知道,jai
有4层,那么函数的总数就是jai
的层
如果要忽略main
并只计算“您的”函数,请从函数总数中减去1
它还返回调用中函数的总数。是否有只返回位置的函数 他们是同一个人 如果调用堆栈为:
main -> foo -> bar -> jai
你想知道,jai
有4层,那么函数的总数就是jai
的层
如果要忽略
main
而只计算“您的”函数,请从函数总数中减去1。我建议使用现有库
如果您的所有(或至少大部分)代码都是用DWARF格式的调试信息*编译的(在Linux上),我建议使用Ian Taylor的(在GCC内部使用,但可以独立使用)。当DWARF调试信息可用时,它甚至可以提供源位置信息
您还可以使用GNU glibc
另见海湾合作委员会的报告
注*:您可以将
-g
和-O2
传递给gcc
或g++
编译器,以启用调试信息和优化功能。我建议使用现有库
如果您的所有(或至少大部分)代码都是用DWARF格式的调试信息*编译的(在Linux上),我建议使用Ian Taylor的(在GCC内部使用,但可以独立使用)。当DWARF调试信息可用时,它甚至可以提供源位置信息
您还可以使用GNU glibc
另见海湾合作委员会的报告
注*:您可以将-g
和-O2
传递给gcc
或g++
编译器,以启用调试信息和优化。“如果我们可以获得函数在调用堆栈中的位置”:即执行大量指令、参数或全局变量。“如果我们能得到函数在调用堆栈中的位置”:这要么是要执行的大量指令,要么是一个参数,要么是一个全局变量。