欢迎使用优快云-markdown编辑器

部署运行你感兴趣的模型镜像

GDB调试技巧整理

写在前面

最近工作中在进行C语言主机进程相关的开发工作,相关开发工作不依赖与IDE进行,编译环境和运行环境分离(编译是在独立的编译机上进行,编译产生bin文件之后再拿到运行环境中进行使用)。

好的调试工具对于整个开发过程而言是有着非常重要的意义的,它就像人类的眼睛一样,可以让开发者清楚的了解到程序的运行情况。而对于C语言的调试而言,GDB工具是非常实用的工具,也是非常基础的手段。本文在基于之前网友的整理,并结合自己的认识,进行相关的整理,以期做自我总结,并做到对大家的工作有所帮助。

GDB的基础认识

GDB的主要功能集中在如下四个方面:

  1. 启动程序
  2. 使程序在指定的位置断点
  3. 当程序被停住后,检查程序中所发生的事
  4. 当程序bug时,修改bug产生的影响,继续测试
GDB的基础命令

程序启动

  1. gdb <program>

    其中program就是程序的可执行文件,默认是当前路径,也可以全路径指定

  2. gdb <program> core

    同时调试运行的程序和core文件,core文件是程序运行异常后coredump的文件

  3. gdb <program> <PID>

    program代表系统的一个进程,PID是其进程号。这种方式下gdb会自动attach附着上去并进行调试。其中program应该能够在系统的环境变量中搜索到 这个地方需要再确认一下

    对于已经进行的进程的调试,我们也可以通过

    gdb <program> 进入程序的gdb调试

    attach <PID> 完成调试过程向指定PID的绑定

程序启动信息设置

  1. 设置启动参数

    set args 可指定运行时参数。(如:set args 10 20 30 40 50)

  2. 设置运行环境

    设置程序的运行路径: path <dir> (可以通过show paths 查看)

    设置环境变量: set environment varname [=value] (可以通过show environment [varname]查看)

  3. 设置工作目录

    cd <dir>

  4. 设置程序的输入输出

    info terminal 显示你程序用到的终端的模式

    使用重定向控制程序输出。如:run > outfile

断点

断点设置的关键词是break,可以缩写为b,后文统一使用缩写

  1. 断点的设置

    • b <function> 在指定的函数位置增加断点
    • b <filename> <linenum> 在指定文件的对应行号增加点
    • b +offset / -offset 在当前行号前面/后面offset行增加断点
    • b … if 当条件成立时断住,如循环体中设置break if i==100
  2. 断点的删除

    • clear 删除程序中的所有断点
    • clear <linenum> 删除这行对应的断点
    • clear <function> 删除该函数的断点
    • delete <b_id1 b_id2> 删除指定编号的多个断点
  3. 断点的查看

    • info break [n] ;n可选,表示断点号
  4. 断点的运行

    • next <count> 单步运行, 缩写为n
    • step <count> 单步跟踪,如果有函数调用,则进入。 缩写为s
    • continue 继续运行,所谓为c

程序运行信息查看

  1. 查看源程序 此处需要测试一下,反编译出来的代码??

    • list <linenum> 显示行号周围的源码
    • list <function> 显示指定函数的源码
  2. 查看运行时数据

    • print <expr> 显示表达式对应的信息
    • print /<f> <expr> 按照指定的格式输出表达式信息
  3. 查看栈信息

    • backtrace (或bt) 打印当前的函数调用栈的所有信息
    • info args 打印当前函数的参数名及其值
    • info locals 打印当前函数的所有局部变量及其值

    改变程序的执行

  4. 修改变量值

    • print var=<val>修改变量var的值为val
  5. 跳转执行

    • jump <linespec> 指定下一条语句的执行点,可以通过filename:linenum的形式,也可以通过+num这种偏移量的形式
  6. 产生信号量

    • signal 产生一个信号量给调试的程序
  7. 强制函数返回

    • return 强制当前函数返回
    • return <expr> 强制当前函数以表达式结果作为返回值返回
本文参考
  1. [用GDB调试程序]: http://wiki.ubuntu.org.cn/index.php?title=%E7%94%A8GDB%E8%B0%83%E8%AF%95%E7%A8%8B%E5%BA%8F&variant=zh-cn
  2. [Linux gdb设置和管理断点]: http://www.cnblogs.com/rosesmall/archive/2012/04/13/2445527.html

您可能感兴趣的与本文相关的镜像

AutoGPT

AutoGPT

AI应用

AutoGPT于2023年3月30日由游戏公司Significant Gravitas Ltd.的创始人Toran Bruce Richards发布,AutoGPT是一个AI agent(智能体),也是开源的应用程序,结合了GPT-4和GPT-3.5技术,给定自然语言的目标,它将尝试通过将其分解成子任务,并在自动循环中使用互联网和其他工具来实现这一目标

在数字化环境中,线上票务获取已成为参与各类活动的主要途径。随着公众对热门演出需求的增长,票源往往在开放销售后迅速告罄,导致普通消费者难以顺利购得所需票券。为应对这一挑战,部分技术开发者借助编程手段构建了自动化购票辅助程序,旨在提升用户成功获取门票的概率。本文将以一个针对特定票务平台设计的自动化工具为例,系统阐述其设计理念、技术组成及具体实施流程。 秀动网作为国内知名的演出及体育赛事票务销售平台,因活动热度较高,常出现访问拥堵、瞬时抢购压力大等现象,使得常规购票过程面临困难。因此,开发一款能够协助用户更有效完成票务申购的辅助工具具有实际意义。 该工具主要具备以下几项关键功能:持续监控目标平台的票务信息更新;在票务释放时自动执行选座、添加至购物车及提交订单等系列操作;集成一定的异常处理机制,以应对网络延迟或服务器响应异常等情况。 在技术实现层面,选用Python作为开发语言,主要基于其语法简洁、标准库与第三方资源丰富,适合快速构建功能原型。同时,Python在网络通信与浏览器自动化方面拥有如requests、selenium等成熟支持库,为程序实现网页交互与数据抓取提供了便利。 开发过程主要包括以下环节:首先解析目标网站的页面结构,明确可通过程序操控的网页元素路径;随后编写监控模块,实时检测新票务信息的上线并及时触发后续操作;接着模拟用户操作流程,包括自动填写个人信息、选择座位偏好、完成购物车添加等步骤,并通过行为模拟降低被平台反爬虫机制识别的可能;最终实现订单自动提交,并在成功购票后向用户发送通知。 此外,该工具提供了可配置的操作界面,允许用户根据个人需求设定抢票时间、目标活动类型及座位选择等参数,从而在提升使用体验的同时,减少对票务平台服务器资源的非必要占用。 需指出的是,尽管此类工具能提高购票效率,但其使用可能涉及违反平台服务协议或相关法规的风险。各票务销售方通常对自动化抢票行为设有明确约束,因此开发与使用者均应遵守相应规定,确保技术应用的合法性。 综上所述,该基于Python的票务辅助工具是针对特定场景设计的自动化解决方案,通过技术手段改善用户购票体验,但同时也强调必须在法律与平台规则框架内合理使用此类技术。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值