首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用gdb调试C++ STL/Boost的最佳实践

使用GDB调试C++ STL/Boost的最佳实践

GDB(GNU调试器)是一个强大的调试工具,可以帮助您调试C++ STL/Boost代码。以下是一些建议和最佳实践,以帮助您更有效地使用GDB调试C++ STL/Boost代码:

  1. 编译和链接:确保在编译和链接时使用-g选项,以便在可执行文件中包含调试信息。例如:
代码语言:txt
复制
g++ -g -o my_program my_program.cpp -I /usr/include/boost -L /usr/lib -lboost_system -lboost_filesystem
  1. 加载符号表:在启动GDB之前,确保已经安装了正确版本的Boost库的调试符号。您可以使用以下命令安装Boost库的调试符号:
代码语言:txt
复制
sudo apt-get install libboost-all-dev
  1. 启动GDB:使用以下命令启动GDB并加载您的可执行文件:
代码语言:txt
复制
gdb my_program
  1. 设置断点:使用break命令在代码中设置断点。例如:
代码语言:txt
复制
break main
  1. 运行程序:使用run命令运行程序。GDB将在设置的断点处停止执行。
代码语言:txt
复制
run
  1. 单步执行:使用step命令单步执行代码。这将使GDB逐行执行代码,并在每个步骤中显示当前行的上下文。
代码语言:txt
复制
step
  1. 监视变量:使用watch命令监视特定变量的值。例如,要监视名为my_var的变量,请输入以下命令:
代码语言:txt
复制
watch my_var
  1. 打印变量值:使用print命令打印变量的值。例如,要打印名为my_var的变量的值,请输入以下命令:
代码语言:txt
复制
print my_var
  1. 继续执行:使用continue命令继续执行程序,直到达到下一个断点。
代码语言:txt
复制
continue
  1. 查看堆栈跟踪:使用backtrace命令查看当前堆栈跟踪。
代码语言:txt
复制
backtrace
  1. 清除断点:使用clear命令清除断点。例如,要清除在第5行设置的断点,请输入以下命令:
代码语言:txt
复制
clear 5
  1. 退出GDB:使用quit命令退出GDB。
代码语言:txt
复制
quit

通过遵循这些最佳实践,您可以更有效地使用GDB调试C++ STL/Boost代码。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Array简单使用BoostSTL通用)

目录 目录 介绍 使用 BoostSTL区别 介绍 本来这一次是想简单介绍一下Boost里面的协程库使用,但是Boost.Coroutine已经被废弃了,而Boost.Coroutine2目前只有非对称协程支持...Boost.Array提出,主要是因为在当时,STL中并没有一个具有C++风格,固定大小容器。...而C中数组对于C++来说,略显不优雅;而std::vector由于是动态,相对来说性能上会有不必要损失,也没办法在模板中使用(C++20中,std::vector可以使用在模板中,而且支持大部分函数...BoostSTL区别 STLArray在高版本C++中,会支持更多constexpr,如果使用在模板中会更加方便。...为了支持更低版本C++Boost使用了模板偏特化来处理数组大小为0情况。 Boost中有一个assign函数,功能和fill一样,但是STL中没有。

57030

【Linux】调试工具gdb使用

,但是还没有学习如何在Linux下对代码进行调试,通过本章学习,将学会如何使用gdb对代码进行调试。...gdb安装:sudo yum install -y gdb(没有配置sudo可以在root身份下输入 yum install -y gdbgdb使用 debug与release 我们知道,程序发布有两个版本...很简单,只需要输入l(或者list),就可以查看我们代码,这里我们简单写了一个排序代码,来研究gdb使用。...,同样我们在Linux下也可以查看堆栈调用情况,输入指令bt即可 VS里main函数函数栈帧创建 Linux下使用gdb调试bt命令观察所调用堆栈 跳转指定行(until) 在vs中,我们在调试时要想跳转至指定行号地方...断点之间跳转(c) 我们知道vs下可以使用f5来进行断点之间切换,gdb中也可以,命令为c(vs中f5)(vs中使用f5都是处于调试状态下,因此gdb也是如此) 关于gdb其它一些指令 gdb指令还有很多

3.3K30

玩转C++调试之PythonGDB库增强

玩转C++调试之PythonGDB库增强 0.导语 调试是软件开发过程中不可或缺一环,而GDB(GNU调试器)作为一款功能强大调试工具,在开发者中得到广泛应用。...除了传统命令行调试功能外,GDB还提供了PythonGDB库,允许开发者使用Python语言扩展和增强调试能力。本文将介绍如何在GDB使用PythonGDB库,展示其强大调试功能和用例。...GDB库打印了一个名为myPointC++结构体值。...通过在GDB使用PythonGDB库,开发者可以利用Python强大功能扩展和增强调试能力。它提供了丰富API和灵活脚本编写能力,使得调试过程更加高效和便捷。...希望本文能够帮助您更好地理解和应用PythonGDB库,提升调试技能和开发效率。

56720

【Linux】Linux调试器--gdb使用

---- ---- 一、gdb介绍 1. gdb是linux上面的调试器,是非图形化界面纯命令行调试,用起来非常麻烦! 2....安装gdb工具命令 sudo yum install -y gdb 3....默认情况下,gdb无法进行对gcc现在发布程序进行调试,因为gcc默认生成软件是realease版本,没有调试信息,无法被调试gdb调试,并且gcc是默认动态链接,如果想静态链接还需要加static...debug是给程序员用版本,添加了调试信息,用于解决软件或程序中出现问题,realease是发行给客户使用版本,并未添加调试信息,只需要给客户提供优越产品使用环境即可,至于是否能够debug调试...中所添加调试信息,而realease版本是没有这些调试信息 三、gdb使用 1.显示代码: l+行号(list)指令 gdb会默认记住历史上曾经输入指令,l+0输入后gdb会从第零行开始显示部分代码

3.5K30

【Vscode】调试go语言程序最佳实践

使用vscode可以很容易调试go语言程序,本篇就介绍一下博主个人使用心得。 1.写在前面—delve Delve是Go语言调试工具。vscode调试,实质是集成了Delve。...\main_test.go #打断点 b main_test.go:10 #或者具体测试方法 b TestSum #执行至断点 c #退出 q 2.vscode调试最佳实践 2.1 添加调试配置文件...run package tests 运行整个包中测试,等价于执行go test -cover,请谨慎使用 run file tests 运行本文件测试方法,等价于执行go test *_test.go...,请谨慎使用 run test 只运行单个测试方法,等价于执行go test -v main_test.go --test.run 测试方法名称 debug test 只调试单个测试方法,这个博主还真没找到等价命令...3.结论 vscode调试go语言程序最佳实践: F5或者快捷调试,默认都是启动应用,且只保留一个配置,配置中 mode 设为debug 所有的单元测试,请只在测试函数上方单点运行: run test

8.7K01

C++知识体系总结:语言核心与代码工程

STL使用泛型编程典范 ✧ 第三方库:编程语言要想发挥巨大作用,必须依赖第三方库,本文重点在语言内核上,对第三方库不做过多介绍 关于C++工程化:主要涉及代码构建,单元测试,代码调试,编程环境IDE...STL模板 泛型编程,C++最强大地方,也是最复杂地方 基于模版编程,主要用于程序库编写,例如STL 3.6....腾讯工程实践 在腾讯内部,代码管理经历了不同阶段,不同部门也有不同代码管理规范,下面这篇文章介绍内容很有代表性: 文章地址:腾讯技术工程:微信小仓实践录|后端代码仓库发展史 7....代码调试 8.1. gdb 调试C/C++代码,最著名工具就是gdb,但坦白说笔者用并不多, 在过往十多年编程生涯里,用gdb次数不会超过十次:) 常用 gdb 命令: 参考:大佬们都是怎么用...通用方法 不用gdb并不代表不调试代码,笔者总结了调试代码三板斧:print+log+unittest 大部分时候就用print,用不了print就打log,近几年体会到了单测威力,就开始写单测 调试代码三板斧

51440

使用GDB调试Python里optimized out问题

首先,贴点网友们经验: http://www.cnblogs.com/dkblog/p/3806277.html https://blog.alswl.com/2013/11/python-gdb/...然而,在现网服务器gdb调试python时,却因为缺少乱七八糟库而无法分析。 所以,最靠谱办法是gdb generate-core-file 生成core文件,拖回开发机上面分析。...目录对应gdb脚本;我python是软链到 usr/local/services/python/bin/python2.7.py,所以脚本要放到这个路径: /usr/lib/debug/usr/...local/services/python/bin/python2.7-gdb.py 环境搞好后,就可以开心地调试python了!...看了下gdb脚本和python代码,发现虽然f_code参数被优化掉了,但是co参数、freevars参数还在啊,根据python代码里freevars用法,只要-1, -2, -3地退格使用,就是对应

2.4K190

Cpp后台学习计划与记录

《Effective STL》 《STL源码剖析》- 《深度探索C++对象模型》 《More Effective C++》 Linux环境&相关工具 《鸟哥Linux私房菜I》- GCC/GDB -...nginx UNIX v6 项目实践 C++线程池 √ C++内存池 √ 代理程序 ftp服务器 网络库 即时通讯软件 消息队列 k-v数据库 笔试面试 牛客网面经 - 牛客笔试题 《剑指offer》...### Makefile编写 * 能熟练地编写Makefile ### 目标文件 * 了解ELF文件类型 * 了解两种视图下ELF文件内容 * 了解处理目标文件相关工具 ### 调试工具 * 熟练使用...strace\gdb调试程序 * 熟练使用top\ps\valgrind工具分析进程 ## 编程语言 ### 语法 * 熟练掌握函数、数组指针、引用、结构体、预处理等语法知识 ### 面向对象 * 类与对象...* 了解派生类访问属性 * 类多态 * 熟练使用多态和虚函数 * 能使用单例模式 * 掌握纯虚函数用法 ### STL使用 * 掌握string\vector\map

50920

C++STL——setmultiset 和 mapmultimap使用

树形结构关联式容器 根据应用场景不同,STL总共实现了两种不同结构关联式容器:树型结构与哈希结构。 树型结构关联式容器主要有四种: map、set、multimap、multiset。...关于set仔细介绍大家可以去看文档 不过是英文,大家可以借助翻译工具查看 3.1 set使用 由于我们之前已经学了好几个STL里面的容器,所以这里对于这些容器使用,其实对我们应该是比较轻松...那我们接下来就来熟悉一下它使用: 看一下它构造函数 那我们来构造一个空set,然后插入一些值 首先使用set要包含对于头文件#include 我们使用insert插入几个元素...5.2 pair 那在学习map使用之前,我们来学一个STL里面的类/结构体模板——pair 我们来看一下SGI-STL中关于pair定义: template <class T1, class...(1)STLmap就是将key和value放在一起来保存(一般first对应key,second对应value)。

14610

C++初阶】STL-string使用

文章目录 一.string初识 1.STL简介 a.STL组成 b.STL和string关系 2.basic_string 二.构造函数 三.三种遍历方式 四.容量相关函数 1.size() 2....网上有句话说:“不懂STL,不要说你会C++”。STLC++优秀作品,有了它陪伴,许多底层数据结构 以及算法都不需要自己重新造轮子,站在前人肩膀上,健步如飞快速开发。...b.STL和string关系 推荐一个学习C++一个文档网站:C++文档说明,看文档也是一种工作必备能力哦 历史上,string出现STL出现早,但是因为功能上string和STL容器很像...原因:string设计早于STLSTL有自己一套,也就包含size() string有它一套,也就是length(),作为STL设计者把string加入到STL时候,为了向前兼容,就保留了原来一套...const char* c_str() const; 一般在C和C++结合使用时候能使用到,比如用C语言打开文件 void test9() { string file("test.cpp");

27120

C++ STL学习之【list使用

---- 前言 STL vector 存在头部及中部操作效率低缺陷,需要另一种容器来弥补其短板,此时 list 就应运而生,list 是一个双向带头循环链表,是链表终极形态,除了不支持下标的随机访问外...,其他方面效率都是极高,本文将带大家认识、使用 list 容器 list 结构示意图(双向带头循环链表) 出自 《STL源码剖析》 ---- ️正文 学习使用容器首先需要从 默认成员函数...反向迭代器 reveser_iterator 正向与反向 const 版本 实际使用时,正向迭代器与 begin()、end() 匹配使用,反向迭代器与 rbegin()、rend() 匹配使用...,其他使用非连续空间容器也是如此,由此可以看出迭代器设计巧妙之处(以统一接口,规范所有容器使用) 注意: list 也存在迭代器失效问题,在 erase 节点后,此处迭代器将失效,需要及时更新迭代器...《list》 ---- 总结 以上就是本次关于 STL list 容器学习使用全部内容了,list 相对于前两种容器来说比较特殊,值得细细研究,list 核心内容在于其迭代器类设计,将在下篇文章

15420

C++】简述STL——string类使用

文章目录 一、STL简述 1.STL框架 2.STL版本 二、编码铺垫 三、string类 四、常见构造 五、operator[] 六、访问及遍历 七、iterator迭代器 1.正向迭代器 2...template libaray-标准模板库):是C++标准库重要组成部分**,不仅是一个可复用组件库,而且一个包罗数据结构与算法软件框架**。...1.STL框架 2.STL版本 原始版本 Alexander Stepanov、Meng Lee 在惠普实验室完成原始版本,本着开源精神,他们声明允许任何人任意 运用、拷贝、修改、传播、商业使用这些代码...我们后面学习STL要阅读部分源代码,主要参考就是这个版本。...,另外,值得在这里强调对于一些接口使用我们可以去查文档进行理解使用

40830

C++ STL 学习之【string使用

前言 STLC++ 重要组成部分,由六大部分构成:伪函数、空间配置器、算法、容器、迭代器 和 配接器,其中各种各样 容器 可以很好辅助我们写程序,比如今天要介绍 string,有了它之后,...形式,当识别到其他字符时,会匹配使用对应标准,比如当识别到汉字时,会使用 GBK 编码标准来进行输出(Windows) 后续随着万国码 Unicode 诞生,提出了能适用更多语言编码标准...、容量、长度等信息,我们也可以进行手动扩容等操作 ️获取数据 获取 string 对象中指向字符串指针 _str C++兼容C,在某些场景下需要使用指向字符串指针,因此 string 类中提供了这个接口...string 诞生于 STL 之前,当时设计获取大小函数为 length() 后来当 string 并入 STL 后,委员会为了统一化,就在 string 类中添加了一个 size() 函数,因为其他容器中获取大小函数都是...首先是 STL 版本不同,其次string 在实际使用中,都用不了太大空间,因此 VS 就直接索性给了一个默认大小为 15 数组,后续有需要再进行扩容 频繁扩容会导致内存碎片问题,VS在这里处理方法是比较合理

17720

C++ STL学习之【vector使用

---- 前言 vector 是表示可变大小数组序列 容器,其使用是一块 连续 空间,因为是动态增长数组,所以 vector 在空间不够时会扩容;vector 优点之一是支持 下标的随机访问,缺点也很明显...i++; } 运行(调试模式下)结果是这样: 不止 insert 迭代器会失效,erase 迭代器也会失效 简单来说:插入或删除后,可能导致迭代器指向位置失效,此时没有及时更新,再次使用视为非法行为...等于 _start,就完成了清理,不需要进行缩容,这样做是低效 关于 vector 更多、更详细内容,欢迎移步 《C++ STL学习之【vector模拟实现】》 ---- 6、相关试题 光知道怎么使用是不够...,还需要将知识付诸于实践,切记纸上谈兵 下面是一些比较适合练习使用 vector 试题,可以做做 vector 值得做题目 ---- 总结 以上就是本次关于 STL 之 vector 全部讲解了,...vector 相对来说函数比较少,也比较好理解,不过在实际使用中,会存在不少问题,需要对 vector 不断使用以提高认知,如果对 vector 剩余函数感兴趣,可以阅读官方文档 vector 如果你觉得本文写还不错的话

23010

Linux后台开发必看(给进军bat你)

三 相关知识点汇总 1 c/c++相关 c++虚函数原理 智能指针 c语言如何实现c++对象以及私有成员 c++多态实现 new和malloc区别以及底层实现原理 STLvector怎么扩容 虚函数指针初始化过程...为什么 深拷贝与浅拷贝 指针常量,常量指针区别 c语言语法推荐书籍: 《c专家编程》《c与指针》 c++语言语言推荐书籍:《c++ primer》《effect c++c++语言stl底层原理...tcpdump top makefile介绍下(cmake介绍下) gdb查看堆栈中所有遍历 gdb查看shared_ptr指向内容 gdb如何调试多进程多线程 g++和gcc编译出来有什么区别...死锁怎么调试 core文件中是什么,gdb调试core文件 如何读取一个10G文件,cat一个10g文件会发生什么 Linux基础命令推荐书籍:《Linux就该这么学》 Linux应用编程推荐书籍《...后台开发应用与实践》《Linux多线程服务端编程》 补充资料:gdb手册和makefile详解 7 大数问题 有200亿qq,但实际只有25亿用户,找到重复qq 25亿qq占用内存多大 1-100万

1.6K20

Linux后台开发必看!

三 相关知识点汇总 1 c/c++相关 c++虚函数原理 智能指针 c语言如何实现c++对象以及私有成员 c++多态实现 new和malloc区别以及底层实现原理 STLvector怎么扩容 虚函数指针初始化过程...为什么 深拷贝与浅拷贝 指针常量,常量指针区别 c语言语法推荐书籍: 《c专家编程》《c与指针》 c++语言语言推荐书籍:《c++ primer》《effect c++c++语言stl底层原理:《...syn如果丢了,重传多少次 tcp/ip相关推荐书籍:《tcp/详解:1》 熟悉使用wireshark捕包工具,加深印象可以使用python一个库,scapy/dpkt. 3 数据结构相关 hash处理冲突方法...tcpdump top makefile介绍下(cmake介绍下) gdb查看堆栈中所有遍历 gdb查看shared_ptr 指向内容 gdb如何调试多进程多线程 g++和gcc编译出来有什么区别...死锁怎么调试 core文件中是什么,gdb调试core文件 如何读取一个10G文件,cat一个10g文件会发生什么 Linux基础命令推荐书籍:《Linux就该这么学》 Linux应用编程推荐书籍:《后台开发核心技术与应用实践

3.2K40

gdb调试】在ubuntu环境使用gdb调试一棵四层二叉树数据结构详解

整体思路 在案例中我使用c语言编写了一个简单四层二叉树进行 GDB 调试练习。这个程序故意在后面引发了一个段错误,导致程序崩溃。文章将使用 GDB 来诊断这个问题。 2....准备内容 建议阅读前先查看gdb技巧 传送门:【GDB调试技巧】提高gdb调试效率-CSDN博客 2.1 配置.c文件 建议先配置一下.c文件使其显示行数【方便后续快速定位bug】。...调试基础 在使用GNU调试器(GDB)时,以下是一些常用命令: run (或 r): 启动程序并开始调试。...[Thread debugging using libthread_db enabled]: 这个消息表明 GDB 正在使用 libthread_db 库进行线程调试,这是针对多线程程序。...这里 tree3_01.c 是源代码文件名,而 58 则是指示了具体行号。 4. gdb技巧 【GDB调试技巧】提高gdb调试效率-CSDN博客

6710
领券