Linux下的的GDB调试技巧二 —— 基本功能

489 阅读2分钟

本文已参与 [新人创作礼] 活动,一起开启掘金创作之路。​

GDB安装

  • 在系统上安装gdb(以Ubuntu为例)

    sudo apt install gdb

之后通过dpkg -i命令进行安装(注意使用sudo或者root)。

之后根据指导进行configure和make。

GDB常用功能概览

GDB常用功能如下表所示:

支持的功能

描述

启动调试与执行

逐过程、逐语句执行等

断点管理

设置断点、查看断点等

查看修改、自动显示、动态打印变量的值

在调试状态下查看、修改及内存数据等操作

显示源代码

显示源代码

查看调用栈

查看堆栈信息

线程管理

调试多线程程序,查看线程信息

其它

包括搜索源代码、查看变量类型、窗口管理、调用shell命令、gdb自定义宏的使用、信号(signals)、commands等命令

可被GDB调试的程序

GDB可以调试的程序包括以下几类:

1. 自己编译的程序

  • cmake带“-DCMAKE_BUILD_TYPE=Debug”参数的程序。
  • makefile中带“-g”参数的,并添加-O0选项的程序。

注:

-O0不进行优化处理。

-O或-O1优化生成代码。

-O2进一步优化。

-O3比-O2更进一步优化,包括inline函数。

2. 非自己编译的程序

  • 使用readelf -S 程序名称 | grep debug命令,能够输出调试信息的程序;如果没有任何的debug信息,则不能被调试。
  • 使用file命令查看strip的情况,没有显示stripped资阳的程序;如果最后显示stripped,则不能被调试。

注:

(1)gdb如果调试不可被调试的程序时,会报"Reading symbols from XXX...(no debugging symbols found)...done"错误。

(2)一般deb打包之后的可执行程序都是被strip处理过的。