Я использую boost.stacktrace для печати стековых трасс исключений, вот код:
#include <iostream>
#include <boost/stacktrace.hpp>
void bar() {
throw std::runtime_error("A runtime error.");
}
void foo() {
bar();
}
int main (int argc, char* argv[]) {
try {
foo();
} catch (std::exception& e) {
std::cout << e.what() << std::endl;
std::cout << boost::stacktrace::stacktrace() << std::endl;
}
return 0;
}
Я скомпилировал и выполнил его с помощью следующей команды:
clang++ -g hello.cpp -ldl -lboost_stacktrace_backtrace -lbacktrace
./a.out
И я получил следующий результат:
A runtime error.
0# 0x000056335CB25570 in ./a.out
1# __libc_start_main in /usr/lib/libc.so.6
2# 0x000056335CB2534E in ./a.out
Не хорошо, имена функций заменяются адресами.Я хочу что-то вроде этого (что показано на сайте boost.stacktrace ):
0# bar(int) at /path/to/source/file.cpp:70
1# bar(int) at /path/to/source/file.cpp:70
2# bar(int) at /path/to/source/file.cpp:70
3# bar(int) at /path/to/source/file.cpp:70
4# main at /path/to/main.cpp:93
5# __libc_start_main in /lib/x86_64-linux-gnu/libc.so.6
6# _start
Как я могу это сделать?