gpt4 book ai didi

C++ backtrace 不打印函数和 so 文件

转载 作者:行者123 更新时间:2023-11-28 04:30:29 25 4
gpt4 key购买 nike

我有多个项目。每个项目创建自己的 so 文件。出于某种原因,回溯不会打印函数,因此会在崩溃时生成文件。

我用 -rdynamic 编译。例如:-std=c++14 -pthread -pedantic -rdynamic -fPIC -g -c -fmessage-length=0 -llibtcmalloc

这是我在程序崩溃时得到的回溯:

Error: signal 11:
./libs/BaseCppProjectRun[0x402a50]
/lib/x86_64-linux-gnu/libc.so.6(+0x354b0)[0x7fb9aa1db4b0]
./libs/BaseCppProjectRun[0x403013]
./libs/BaseCppProjectRun[0x402b95]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf0)[0x7fb9aa1c6830]
./libs/BaseCppProjectRun[0x402669]

回溯函数:

void PrintCallStackOnError(int sig)
{
void *array[10];
size_t size;
size = backtrace(array, 10);
fprintf(stderr, "Error: signal %d:\n", sig);
backtrace_symbols_fd(array, size, STDERR_FILENO);
exit(1);
}

(此函数将由定义在 main 函数上的 signal(SIGSEGV, PrintCallStackOnError) 调用)。

请问有人可以帮忙打印so文件和backtrace上的函数名吗?

谢谢。

最佳答案

在启用调试符号的情况下编译您的程序(和库)。 -g-ggdb。你会得到更有用的回溯 - 是的,即使是发布版本也是如此。您的二进制文件会更大,但您的运行时性能不会受到影响。

另请查看 addr2line 工具。

关于C++ backtrace 不打印函数和 so 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53091160/

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