尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
简单g++和gdb调试
文章目录1. 编译过程2. g重要参数3、生成库文件3.1 静态库3.2 动态库4. gdb调试gdb 常用命令示例frame查看栈帧info查看调试信息display自动显示表达式set修改变量与环境thread1. 编译过程步骤作用命令预处理宏展开头文件包含g -E test.cpp -o test.i编译生成汇编语句代码g -S test.i -o test.s汇编生成机器语言代码g -c test.s -o test.o链接生成可执行文件g test.o -o test.exe2. g重要参数参数作用命令-g可被gdb调试g -g test.cpp -o test.exe-O[n]代码优化g -O2 test.cpp -o test.exe-l指定动静态库文件g -lglog test.cpp -o test.exe-L指定动静态库文件路径g -L/home/lzg -lmytest test.cpp -o test.exe-Wall打印告警信息g -Wall test.cpp -o test.exe-w关闭告警信息g -w test.cpp -o test.exe-stdc11指定编译标准g -stdc11 test.cpp -o test.exe-D指定宏名g -DV5PLAT test.cpp -o test.exe-I指定include文件路径g -DV5PLAT test.cpp -o test.exe3、生成库文件3.1 静态库1.生成二进制文件 g-c swap.cpp-o swap.o-I../include 2.归档为静态库 ar rs libSwap.a swap.o 3.利用静态库编译main gmain.cpp-lSwap-Lsrc-Iinclued-o main.exe 4.运行可执行文件./main.exe需要说明1、-Lsrc是为了执行静态库文件的路径而不是指定源代码路径2、-lSwap链接静态库时不要把完整静态库名称(lib*.a)写进来3.2 动态库1.生成二进制文件 g-c swap.cpp-I../include-fPIC-shared-o libSwap.so 2.归档为静态库 ar rs libSwap.a swap.o 3.利用静态库编译main gmain.cpp-lSwap-Lsrc-Iinclued-o main.exe 4.运行可执行文件 LD_LIBRARY_PATHsrc./main.exe需要注明动态库路径.4. gdb调试gdb调试需要在编译时加入-g参数才能支持gdb调试.gdb file ctrl-x ctrl-a 或 gdbtui filegdb 常用命令示例下面分别说明frame、info、display、set的用法。frame查看栈帧frame用于查看或切换当前调用栈帧。典型场景程序在某个函数里崩溃或断点停下时先用bt查看完整调用栈再用frame 0、frame 1等切换到不同层级逐层检查各函数的参数和局部变量从而定位问题发生在哪一层调用。(gdb)frame# 查看当前栈帧(gdb)frame0# 切换到第 0 帧(gdb)bt# 查看完整调用栈backtraceinfo查看调试信息info与不同子命令搭配可查看断点、局部变量、寄存器、线程等信息。典型场景进入调试后先执行info breakpoints确认断点位置程序停在断点处时执行info locals查看局部变量排查逻辑问题排查空指针、越界等底层问题时用info registers查看寄存器内容多线程程序则用info threads确认各线程状态。(gdb)info breakpoints# 查看断点信息(gdb)info locals# 查看当前栈帧的局部变量(gdb)info registers# 查看寄存器内容(gdb)info threads# 查看所有线程(gdb)info variables# 查看全局变量display自动显示表达式display会在程序每次暂停时自动打印指定表达式的值。典型场景在单步跟踪循环或递归调用时不用每次手动print把关键变量加入 display 后每执行一步停下都会自动显示它的最新值便于观察变量随迭代的变化规律。(gdb)display a# 每次停下自动显示变量 a(gdb)display/x a# 以十六进制格式每次自动显示变量 a(gdb)info display# 查看自动显示列表(gdb)delete display1# 删除编号为 1 的自动显示项set修改变量与环境set用于修改变量值、设置程序参数或环境变量等。典型场景怀疑某个变量的错误取值导致 bug 时可用set var临时改值后继续运行验证程序需要命令行参数时先用set args指定参数再run运行依赖动态库的程序时可先通过set environment LD_LIBRARY_PATH...指定动态库路径。(gdb)setvar a10# 修改变量 a 的值(gdb)setargs123# 设置程序运行参数(gdb)setenvironmentLD_LIBRARY_PATH./src# 设置环境变量thread(gdb)info threads # 查看所有线程*表示当前线程(gdb)thread2# 切换到线程2(gdb)bt # 查看该线程的调用栈(gdb)info locals # 查看该线程当前栈帧的局部变量(gdb)print var # 打印该线程上下文里的变量 # 如果不切换过去可以使用threadapply(gdb)thread apply all bt # 所有线程的调用栈(gdb)thread apply23bt # 只看线程2、3的栈(gdb)thread apply all print x # 所有线程里的变量 x
RELATED

相关推荐

javascript DOM、事件、事件流、节点操作、元素属性(笔记)

javascript DOM、事件、事件流、节点操作、元素属性(笔记)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/11/5 1:10:56
Java:12-类和对象的概念

Java:12-类和对象的概念

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/11/5 1:10:56
SpringBoot学习之基础1

SpringBoot学习之基础1

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/11/5 1:10:56
MORE NEWS

更多资讯

📰

首次来到CSDN进行创作

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

2027届计算机专业毕设选题指南:含AI技术新颖课题,这些题目可以直接借鉴参考!

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

python实现本地图片查看器

创作灵感电脑上保存了旧照片,想打开看一下,结果打开图片查看软件不是广告就是会员,实在影响心情。所以自己做了个图片查看器,使用python pyqt实现,效果如下:

📰

MySQL 为什么默认是 RR 而不是 RC?隔离级别选型真相

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

先更新数据库还是先删缓存?八种方案里错的有几种

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

Python 的哈希契约:为什么 list 不能当字典的键

原文链接:Python 的哈希契约:为什么 list 不能当字典的键 - 码日新 每日文章 Python 的哈希契约:为什么 list 不能当字典的键 上周帮同事看一个缓存问题:他用列表拼了个 key,运行时直接抛出 TypeError: unhashable t…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬