首页/新闻资讯/正文详情

简单g++和gdb调试

发布时间:2026/11/5 1:10:29 来源:云帆数科 栏目:资讯中心
简单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

相关推荐

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:28

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:28

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:28

【后端开发】FastAPI基础
【后端开发】FastAPI基础

2026.6.21 一、代码 1.导包 from fastapi import FastAPI # from ... import ...手动配置的方法: 终端输入:(确保终端提示符前有 (.venv) 标记) pip install fastapi uvicorn2.创建实例 FastAPI实例app app FastAPI()3.定义接口 … · 2026/11/5 8:50:37

快速上手playwight
快速上手playwight

在自动化测试和网页爬虫的领域,Selenium 曾是无可争议的霸主。然而,随着现代 Web 应用越来越复杂(大量使用 React、Vue、单页应用等),传统的测试工具开始显得有些力不从心。今天,我们要聊的是由微软开源的现… · 2026/11/5 8:48:36

LoRA 训练数据集怎么准备才好用?Fizgig AI 标注、人脸裁剪与外观一致性过滤器 7 大技巧
LoRA 训练数据集怎么准备才好用?Fizgig AI 标注、人脸裁剪与外观一致性过滤器 7 大技巧

【免费下载链接】Fizgig Fizgig — LoRA & Fine-tune Studio for Klein 9B, Krea 2, MiniMax H3, Qwen Image 2.1, Anima & Z-Image Turbo and Ace-Step XL: train, fine-tune, profile, repair and extract LoRAs & LoKR for Image, Video & Music Models 项目… · 2026/11/5 8:47:35

如何用一个仓库补齐你的 Android 技术栈?android-tech-frontier 译文库完全指南
如何用一个仓库补齐你的 Android 技术栈?android-tech-frontier 译文库完全指南

如何用一个仓库补齐你的 Android 技术栈?android-tech-frontier 译文库完全指南 【免费下载链接】android-tech-frontier 【停止维护】一个定期翻译国外Android优质的技术、开源库、软件架构设计、测试等文章的开源项目 项目地址: https://gitcode.com/gh_mirrors… · 2026/11/5 8:46:35

【Java基础知识】方法与注释
【Java基础知识】方法与注释

/* 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 8:43:30

【Java基础知识】进制转换
【Java基础知识】进制转换

/* 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 8:43:30

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

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

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

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

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

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

多智能体协作系统架构设计与实践优化
多智能体协作系统架构设计与实践优化

1. 多智能体协作系统的时代背景2017年Transformer架构的诞生彻底改变了人工智能的发展轨迹。当行业还沉浸在单一大模型带来的性能突破时,Anthropic的研究团队已经将目光投向了更前沿的领域——如何让多个智能体通过协作产生超越单体能力的系统智能。这就像交响乐团中… · 2026/11/5 0:00:39

大模型系统性入门实战指南:从原理到部署微调的全链路路线
大模型系统性入门实战指南:从原理到部署微调的全链路路线

提到大模型的系统性入门,我先说个结论:这事真不难,难的是资料太散、路线太多,今天这个框架明天那个工具,新人很容易在“收藏夹吃灰”和“教程看到一半放弃”之间反复横跳。市面上关于大模型的内容少说有几十万篇&#… · 2026/11/5 0:00:39

鸿蒙文件系统沙箱机制解析与开发实践
鸿蒙文件系统沙箱机制解析与开发实践

1. 鸿蒙文件系统沙箱机制深度解析作为一名从Android转向鸿蒙开发的工程师,我深刻体会到文件系统访问是迁移过程中最先遇到的"拦路虎"。在Android上运行良好的文件读写代码,在鸿蒙真机环境却频频出现文件写入后神秘消失或直接抛出权限拒绝错误的… · 2026/11/5 0:00:39

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

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

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

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

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

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

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码