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() 函数打印出来, 也是有一些帮助的。

相关推荐
ao_lang17 天前
剑指offer第五天
python·算法·cpp
CYRUS STUDIO18 天前
adb 远程调试,手动修改 adb 调试授权信息
android·adb·调试
云中双月20 天前
如何使用Ida Pro和Core Dump文件定位崩溃位置(Linux下无调试符号的进程专享)
linux·嵌入式·gdb·调试·gcc·崩溃·ida pro·ulimit·core dump·cross compile
阿华的代码王国22 天前
【JVM】——JVM运行机制、类加载机制、内存划分
双亲委派模型·程序计数器·堆栈·jvm运行机制·jvm加载机制·元数据区
习惯就好zz1 个月前
windows msvc2017 x64编译AWS SDK CPP库
sdk·aws·cpp·1024程序员节
skylin198401011 个月前
iOS调试真机出现的 “__llvm_profile_initialize“ 错误
ios·objective-c·调试·1024程序员节
Projectsauron1 个月前
STM32 调试之栈回溯和 CmBacktrace 的使用
stm32·嵌入式·调试·1024程序员节
深耕AI1 个月前
新版Win32高级编程教程-学习笔记01:应用程序分类
microsoft·visual studio·cpp
LyaJpunov1 个月前
B+树的原理图解
数据结构·b树·cpp
zkk95271 个月前
C++调试方法(Vscode)(一) ——本地调试
开发语言·c++·vscode·gdb·调试