gpt4 book ai didi

c++ - 跟踪断言失败时如何知道调用者函数

转载 作者:IT老高 更新时间:2023-10-28 23:01:23 26 4
gpt4 key购买 nike

我的问题与此有关SO post和其他一些alike .我想知道调用函数的名称,因为在断言失败时,我不知道哪个函数将垃圾值传递给被调用者。一种方法是检查所有可以调用该函数的函数,但这很麻烦。

您能否提出一个更好的解决方案,即使依赖于平台?我正在使用 g++ 4.6。提前致谢。

最佳答案

参见 backtrace()

例如

#include <execinfo.h>
#include <stdio.h>

void bar() {
void* callstack[128];
int i, frames = backtrace(callstack, 128);
char** strs = backtrace_symbols(callstack, frames);
for (i = 0; i < frames; ++i) {
printf("%s\n", strs[i]);
}
free(strs);
}

int foo() {
bar();
return 0;
}

int main() {
foo();
return 0;
}

输出:

0   a.out                               0x0000000100000e24 bar + 28
1 a.out 0x0000000100000e81 foo + 14
2 a.out 0x0000000100000e96 main + 14
3 a.out 0x0000000100000e00 start + 52
4 ??? 0x0000000000000001 0x0 + 1

见:

How to generate a stacktrace when my gcc C++ app crashes

关于c++ - 跟踪断言失败时如何知道调用者函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9555837/

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