访问手机版  

Linux常用命令|Linux培训学习|考试认证|工资待遇与招聘,认准超级网工!

招聘|合作 登陆|注册

网络工程师培训

当前位置:网络工程师 > 技术课程 > linux > 热点关注 > linux常用命令

Linux下GDB常用命令总结

时间:2019-07-13

linux常用命令_常用linux命令大全_常用cad快捷键命令

一、GDB概述

Linux下的GDB调试器,是一款GNU组织开发的UNIX/Linux下的程序调试工具,它没有图形化的友好界面,但功能强大。

二、准备工作

(a) 安装GDB: apt install gdb

(b) 创建main.cpp文件

vim使用技巧:在按esc进入命令模式下,在!后可直接输入命令行进行执行,还可以进行上下键查看历史命令。这样可以在不退出vim的情况下进行编译,从而及早发现问题。

三、GDB常用命令及调试实例

常用cad快捷键命令_常用linux命令大全_linux常用命令

由于调试程序是个极为频繁的操作linux常用命令,所以GDB的所有命令,只要不出现冲突linux常用命令,都可以进行简写,如list可直接简写为l,break可直接简写为b。

为了方便调试,修改main.cpp如下:

(1) 编译成debug版

1.在ide工程选项里面配置release版本也生成调试信息,发布时,将pdb文件和exe文件一起发布。? 在vs中我们选择“菜单”-》工具-》选项,选项窗口中选择调试-》符号。galaxys3已经启动开发者选项,但是连接电脑之后手机提示连接为媒体设备,怎么进行usb调试and...……galaxys3已经启动开发者选项,但是连接电脑之后手机提示连接为媒体设备,怎么进行usb调试and...。

(2) 使用GDB对debug版本的可执行文件进行调试

执行 gdb main

【查看代码】

定位到crash函数,上文第一个红色行,然后根据偏移行定位到第三个红色行,向上查看定位到第二个红色行,最后定位到异常代码出现在gtg.cpp的第五行,哈哈一个简单的异常定位就结束了。内联函数应该是语句比较少、结构比较简单的函数,不应该是复杂的函数,因为它对编译器来说就是代码,如果很复杂会造成代码膨胀,反而增大开销,这种情况下其实多数编译器就都会自动把它作为普通函数来处理了。当应用程序运行时,windows会自动调用应用程序框架内部的winmain函数,并自动查找该应用程序类的全局变量theapp,然后自动调用用户应用程序类的虚函数initinstance,该函数会进一步调用相应的函数来完成主窗口的构造和显示工作,如一个单文档应用程序的应用程序文件中的程序名.cpp中的initinstance()函数中的代码:。

常用cad快捷键命令_常用linux命令大全_linux常用命令

【控制程序运行】

(2) break 行号 | 函数名<条件表达式> 设置断点

使用info break ,查看断点信息:

使用 delete (Num) ,删除断点:

(3) run 运行函数到断点处或者程序结束

(4) next 单步运行一条指令,不进入函数(把整个函数当成一行命令执行)

常用linux命令大全_常用cad快捷键命令_linux常用命令

(5) step 单步运行一条指令,进入函数(真正的单条语句运行)

(6) continue 继续执行,直到遇到新断点或者程序结束

(7) watch 变量|表达式 观察变量或者表达式的值,只要其发生变化,则停止。

这个例子不是上述代码,反正比较简单,就是定义个 int i =0; 然后 i++;

【打印和设置内存变量】

为测试方便,修改代码如下:

常用cad快捷键命令_linux常用命令_常用linux命令大全

(8) print 变量|表达式 查看当前指定变量或表达式的值

(9) set 变量名=新值 设置内存中指定变量的值,若出现不明确,需要加上var指明是程序中的变量

【查看程序调用栈】

为方便测试,修改main.cpp如下:

(10) backtrace当程序宕掉时,查看程序调用栈

所以说GDB是在Linux编程中必须使用的工具,没有GDB,在出现错误的时候很难想象错误发生在哪里。另外在Linux中也有这样的好处,就是当程序宕掉了基本不会对系统造成影响,而在windows中程序宕掉甚至会使系统产生异常,所以Linux是比较稳定可靠的,适合做服务器。

段错误调试:使用Core Dump查找程序宕掉的原因,可参考如下博客,讲得很详细:

https://www.cnblogs.com/lidabo/p/5014710.html

 上一个教程:Linux常用基本命令