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

相关推荐
雅典没有娜6 天前
QT/C++与LUA交互过程中,利用ZeroBraneStudio对LUA脚本进行仿真调试
c++·qt·lua·调试·仿真·zerobranestudio
ssxueyi8 天前
Java 常见Exception异常解决方法
java·开发语言·数据库·异常处理·exception
江上清风山间明月11 天前
flutter编译e: Daemon compilation failed: null java.lang.Exception错误解决
java·flutter·exception·daemon·compilation
talentestors14 天前
Codeforces Round 992 (Div. 2) 解题报告
c++·c·题解·cpp
泷fyk23 天前
软件开发和调试:定位错误位置
嵌入式·c·调试·addr2line
Amd79425 天前
Nuxt.js 应用中的 dev:ssr-logs 事件钩子
开发·监控·日志·nuxt.js·调试·ssr·钩子
ao_lang2 个月前
剑指offer第五天
python·算法·cpp
CYRUS STUDIO2 个月前
adb 远程调试,手动修改 adb 调试授权信息
android·adb·调试
云中双月2 个月前
如何使用Ida Pro和Core Dump文件定位崩溃位置(Linux下无调试符号的进程专享)
linux·嵌入式·gdb·调试·gcc·崩溃·ida pro·ulimit·core dump·cross compile
阿华的代码王国2 个月前
【JVM】——JVM运行机制、类加载机制、内存划分
双亲委派模型·程序计数器·堆栈·jvm运行机制·jvm加载机制·元数据区