如何在C++代码中打印堆栈
时间: 2023-11-22 09:55:34 浏览: 201
在C++中,可以使用以下方法打印堆栈:
1.使用std::stacktrace库
在C++17标准中,引入了std::stacktrace库,可以方便地打印堆栈信息。使用该库需要编译器支持,并且需要链接对应的库文件。
示例代码:
```cpp
#include <iostream>
#include <stacktrace>
int main() {
std::cout << std::stacktrace() << std::endl;
return 0;
}
```
2.使用libunwind库
libunwind是一个轻量级的C库,用于获取堆栈信息。使用该库需要在编译时链接对应的库文件。
示例代码:
```cpp
#include <iostream>
#include <libunwind.h>
void print_trace() {
unw_cursor_t cursor;
unw_context_t context;
unw_word_t ip, sp;
// 初始化cursor和context
unw_getcontext(&context);
unw_init_local(&cursor, &context);
// 遍历堆栈信息
while (unw_step(&cursor) > 0) {
unw_get_reg(&cursor, UNW_REG_IP, &ip);
unw_get_reg(&cursor, UNW_REG_SP, &sp);
std::cout << "ip = " << ip << ", sp = " << sp << std::endl;
}
}
int main() {
print_trace();
return 0;
}
```
以上两种方法都可以打印出函数调用的堆栈信息,可以根据需要选择合适的方法。
阅读全文