[C++] GDB的调试和自动化检测

server/2024/11/13 9:20:52/

文章目录

  • GDB基本使用
    • 1. bazel的debug过程
    • 2. line-tables-only的使用
  • Reference

GDB_1">GDB基本使用

参考文档: https://zhuanlan.zhihu.com/p/655719314

1. bazel的debug过程

  • 需要带--copt=-g --copt=-ggdb选项进行编译
// bazel build  --strip=never --copt=-g --copt=-ggdb  //path/to/package/...
// break source.cc:78 : 表示在source.cc 78 line打断点
// p/print 一般只能打印C++中变量信息,而不能打印自定义的一些表达式,和python不太一样// 一些命令说明:
//  watch + 表达式: 通过设置好查看的表达式,则可以使程序在表达式成立时终止运行; 比如观察某个循环iteration时有用
// breaktrace/bt: 该命令打印当前停住地方函数调用栈的所有信息,如果crash,则用bt能很好确定那个地方错误。 
/ bt n/-n: 表示打印栈顶或者栈底n层信息
// info  f   则可以显示出更为详尽的当前栈层的信息
// info  args  显示当前函数的参数名和值
// 用list打印当前程序执行的源码。 需要在编译时加 -g.

2. line-tables-only的使用

  • This full debug info allows for a good debugging experience, with the ability to view function names, local variables, step through code, etc. However, it produces large executable/binary sizes. The line-tables-only optimization strips away all debug info except the line number tables. This means the executables retain the ability to step through code line by line in the debugger, but lose information like local variable names, function parameters, etc.
# cmake
set(CMAKE_CXX_FLAGS_DEBUG "$<$<CONFIG:DEBUG>:-gline-tables-only>")
# bazel 不知道怎么设置,只知道调用dbg这样写
config_setting(name = "x86_debug_build",values = {"cpu": "x86","compilation_mode": "gdb",},
)

相关文章:https://editor.csdn.net/md/?articleId=143571523

Reference

  • bazel的使用

http://www.ppmy.cn/server/140791.html

相关文章

高级java每日一道面试题-2024年10月30日-JVM篇-新生代垃圾回收器和老生代垃圾回收器有哪些?有什么区别?

如果有遗漏,评论区告诉我进行补充 面试官: 新生代垃圾回收器和老生代垃圾回收器有哪些?有什么区别? 我回答: 在 Java 高级面试中&#xff0c;关于垃圾回收器&#xff08;Garbage Collector, GC&#xff09;的知识是非常重要的。Java 的垃圾回收机制主要分为新生代&#xf…

搞了十多年的企业信息化建设从互联网加营销到数字化转型,为什么企业管理效率反而更低了?

为何管理效率反而降低&#xff1f; 企业信息化建设&#xff0c;从互联网加营销到数字化转型&#xff0c;是现代企业经营的重要组成部分。然而&#xff0c;许多企业在实施信息化建设的过程中&#xff0c;却发现管理效率反而降低了。这究竟是为什么呢&#xff1f; 首先&#xf…

vscode摸鱼学习插件开发

不知道大家在摸鱼的时候&#xff0c;会不会想要学习&#xff1f; 或者有没有考公人&#xff0c;下班要学习的&#xff1f; 上班时间摸鱼&#xff0c;下班时间不够学习&#xff1f; 为此&#xff0c;我决定开发一个vscode插件&#xff0c;来刷粉笔题 粉笔插件名称&#xff1a;…

docker 常用方法

目录 docker参数解释 基础信息和环境变量设置 容器运行和管理相关参数 数据卷挂载 GPU 相关参数 镜像相关参数 查看现有的镜像 docker images 查看正在运行的docker docker ps 1、docker启动停止及查看状态 启动docker&#xff1a; systemctl start docker 停止docker…

linux 内核asmlinkage关键字总结

1&#xff0c;看一下asmlinkage的定义 CPP_ASMLINKAGE __attribute__((regparm(0))) GCC中使用__attribute__((regparm(n)))指定最多可以使用n个寄存器&#xff08;eax, edx, ecx&#xff09;传递参数&#xff0c;n的范围是0~3&#xff0c;超过n时则将参数压入栈中&#xff08;…

论文阅读《Structure-from-Motion Revisited》

摘要 增量式地运动结构恢复是从无序图像集合中进行三维重建的一个普遍策略。虽然增量式地重建系统在各个方面上都取得了巨大的进步&#xff0c;但鲁棒性、准确性、完整度和尺度仍然是构建真正通用管道的关键问题。我们提出了一种新的运动结构恢复技术&#xff0c;它改进了目前…

`psdparse`:解锁Photoshop PSD文件的Python密钥

文章目录 psdparse&#xff1a;解锁Photoshop PSD文件的Python密钥背景&#xff1a;为何选择psdparse&#xff1f;psdparse是什么&#xff1f;如何安装psdparse&#xff1f;简单函数使用方法应用场景常见Bug及解决方案总结 psdparse&#xff1a;解锁Photoshop PSD文件的Python密…

Git超详细教程

Git初始 概念 一个免费开源&#xff0c;分布式的代码版本控制系统&#xff0c;帮助开发团队维护代码 作用 记录代码内容&#xff0c;&#xff0c;切换代码版本&#xff0c;多人开发时高效合并代码内容 如何学&#xff1a; 个人本机使用&#xff1a;Git基础命令和概念 多…