cpptrace 库介绍

cpptrace 是一个C++ 开源库, 简单试了下,我的发现和结论:

  • 还不能通过 brew install 安装
  • 最方便方式仍然是 git clone 源码后, CMakeLists.txt 里, add_subdirectory() 方式使用:
cmake 复制代码
add_subdirectory("/path/to/cpptrace" cpptrace.out)
target_link_libraries(xxx cpptrace-lib)
  • cpptrace 主要是给库或程序的开发者用的, 当你写的代码遇到不理想输入时候打算让程序主动崩溃时, cpptrace 能打印完整的调用堆栈
  • 但是如果你是调用别人的代码,比如调用 OpenCV 的矩阵乘法, 而两个矩阵的维度不一样导致了报错,这时候只能看到 opencv 里面抛出异常信息中的 文件:行号, 看不到你的调用代码的位置
  • 简单说, 如果你在重写 opencv, 那你应该用 cpptrace 替代 opencv 原本的那一坨带 exception 的 CV_Assert 的实现

具体到 c++ 代码的用法, 你需要包含头文件,定义一个 trace() 函数, 然后在你的代码中,你打算主动挂掉程序的地方, 调用 trace():

cpp 复制代码
// https://github.com/jeremy-rifkin/cpptrace/blob/main/test/add_subdirectory-integration/main.cpp
#include <cpptrace/cpptrace.hpp>

void trace() {
    cpptrace::generate_trace().print();
}

void foo(int) {
    trace();
}

int main() {
    foo(0);
}

又或者, 你调用了第三方库(如果 opencv),你现在遇到第三方库里的报错挂掉了("主动挂掉"), 但你不知道你的代码在哪里挂的, 在使用二分法排查时, 如果你大概确定了是某一个函数 A() 里面调用了 opencv 挂的, 那么从 main() 函数到 A() 函数的调用堆栈, 可以通过调用 trace() 函数打印出来, 也是有一些帮助的。

相关推荐
Bshaya_4 天前
C++ STL 与 std::string 入门:迭代器、范围 for 及字符串遍历方式
迭代器·字符串·cpp·范围for·标准模板库
安替-AnTi7 天前
不用 root:我用 Tailscale 打通了云手机的 ADB 通道
adb·测试·调试·云手机·claude code
阿钱真强道18 天前
82 极物科技 | KNX调试 - 常见报文异常案例分析
调试·极物·极物智能·极物科技·knx协议·个体地址·报文过滤
阿钱真强道19 天前
78 极物科技 | KNX报文追踪 - 功能总览与使用指南
调试·楼宇自动化·极物·极物智能·极物科技·knx协议·报文追踪
你的强来了99819 天前
WCHToolKit场景实战
网络·串口·调试·usb·ble·分析
skywalk81631 个月前
给DeepSeek harness发布R107任务撰写工作:还有一些其它遗留问题,你也一并放到这一轮任务里!你写并行任务文档,我来分发!
人工智能·调试·deepseek
skywalk81631 个月前
lightplugin项目已经复刻完成了很多插件,还有需要复刻的插件吗? 再复刻12个,另外解决复刻的插件的宽度和广度!
人工智能·调试
Naisu Xu1 个月前
记一次STM32H503冷启动后进入HardFult_Handler的问题
stm32·单片机·嵌入式硬件·调试·内存问题
sulikey2 个月前
Linux Core Dump 完全指南:从原理到实战的崩溃调试手册。什么是core dump?程序报错core dumped怎么办?
linux·服务器·操作系统·调试·coredump
林三的日常2 个月前
【无标题】
java·spring boot·vscode·调试·后端开发