美文网首页
GDB学习1

GDB学习1

作者: 群里大佬 | 来源:发表于2020-10-31 11:05 被阅读0次

vsstudio太大了,喜欢上了vscode,但调试功能不尽如人意,可能我不太会配置。但今天遇到了一个内存错误,试了一下调试鼻祖GDB感觉不错,下面是直接运行时Linux报错信息:

系统报错信息

可以看出来标错很简单,段错误(内存信息已经记录)。

以下是GDB报错信息:

GDB报错

非常详细,告诉你在哪个函数具体到哪一行出错。

这里有个知识点,如何用GDB开始调试一个程序,首先要在编译的时候往程序里加入一些标志信息便于GDB 分析:

gcc xx.c -o xx -g

就是在编译选项最后加上一个-g参数即可,然后就可以正式使用GDB调试程序了,用gdb命令打开你上一步生成的可执行文件。

gdb xx

然后要学习的第一个命令就是(你只要输入r或run按回车即可,(gdb)是系统提示符),这个命令就是用来开始执行程序,有错它会停在出错的地方,并输出错误信息;没有错就正常执行完。

(gdb) r

既然已经定位到错误位置了,接下来就是要在错误位置附近打上一个断点单步执行了,这里要用到断点命令(xxx)表示行数 也可以输入函数名称 这样会在进入指定函数的第一行中断运行:

(gdb) b xxx

然后针对循环的代码,可以搭配使用单步执行和继续运行两个命令,精准定位错误:

(gdb) n   //单步执行 注意是函数内单步,不会进入到调用函数的内部 next

(gdb) c //继续执行,直到下一个断点,常用于循环中定位问题 continue

然后常用的功能还有查看变量值:

(gdb) print xxx

直接打印出变量值,很有效果,我就是通过这个功能查到问题所在:

调试结果

最终通过单步加查看变量两个结合使用,成功定位到错误所在,在将要执行109行时p2已经是一个空指针了,应用中是已经迭代到了链表结尾了,但源程序没有处理这个问题,导致再次调用p2时直接导致内存错误。

还有一个如果不方便打开多个见面,还可以通过list命令打印出程序执行到的函数的原文件内容,

(gdb) l

如图:

打印函数内源码

今天分享到此结束。

相关文章

  • GDB学习1

    vsstudio太大了,喜欢上了vscode,但调试功能不尽如人意,可能我不太会配置。但今天遇到了一个内存错误,试...

  • GDB学习笔记(1)

    最近通过《软件调试的艺术》学习GDB,书刚读了大概三分之一,这里先记一些笔记:-) 缩写 基本操作 断点 b po...

  • 2. gdb的使用

    参考链接1. GDB调试2. gdb调试方法3. gdb调试示例 1. 说说 gdb gdb 是一款 UNIX 系...

  • 【实践】gdb调试golang程序入门及gdb命令列表

    1. 摘要 本文讲解gdb调试GOLANG程序的入门配置,以及gdb命令详解备忘。 2. gdb调试go程序入门...

  • chap2 初识 GDB

    1. GDB 相关概念 GDB, The GNU Project Debugger, 是 Linux 下功能全面的...

  • gdb调试 编译加上-g参数 gcc test1.c -g -o test1 进入调试 gdb test1 开始调...

  • Linux环境中 Android NDK中gdb调试详解

    gdb调试 编译加上-g参数 gcc test1.c -g -o test1 进入调试 gdb test1 开始调...

  • GDB 与 LLDB 命令对照表,非常棒

    GDB与LLDB命令对照表 GDB 与 LLDB 命令对照表1GDB 与 LLDB 命令对照表2 设置观察点 观察...

  • 【性能优化】如何使用 gdb dump 内存

    1.GDB 调试器简介 GDB 全称 “GNU symbolic debugger”,是 Linux 下常用的程序...

  • iOS 安全配置

    一、关于GDB挂起问题 1.首先什么是GDB,GDB就是调试工具,在iOS中 xcode中的断点查看就是调试工具中...

网友评论

      本文标题:GDB学习1

      本文链接:https://www.haomeiwen.com/subject/jrksvktx.html