linux gdb反汇编,Linux gdb调试
发布日期:2021-06-24 17:13:13 浏览次数:2 分类:技术文章

本文共 1574 字,大约阅读时间需要 5 分钟。

使 用

一、生成可调试文件

1. gcc编译

使用gcc编程程序时,需要添加-g表示编译出可调试文件,命令如下:

$ gcc -g main.cpp -o main

2. CMake编译

如果使用CMake,需要在CMakeLists.txt文件中添加:

SET(CMAKE_BUILD_TYPE "Debug")

SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g2 -ggdb")

SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")

注:如果使用CMake编译多个目录,每个CMakeLists.txt文件中都需要添加以上的内容,否则调试时无法跳入相应的函数代码中

二、启动 gdb

1. 直接使用gdb启动程序

// 没有入参的程序

$ gdb main

// 有入参的程序

$ gdb -args main args

// 或者

$ gdb main

(gdb) run args

2. attach方式调试程序

直接运行程序,通过进程id调试程序

$ gdb

(gdb) attach pid

此方式调试程序时,可能会报错没有权限,报错信息如下:

Could not attach to process. If your uid matches the uid of the target

process, check the setting of /proc/sys/kernel/yama/ptrace_scope, or try

again as the root user. For more details, see /etc/sysctl.d/10-ptrace.conf

ptrace: 不允许的操作.

解决办法:使用sudo执行gdb或修改/etc/sysctl.d/10-ptrace.conf中的

// kernel.yama.ptrace_scope = 1

kernel.yama.ptrace_scope = 0 //这里改为0

3. 进程id调试程序

还可以通过形如 gdb program pid 的方式,通过进程id调试,示例如下:

$ gdb main pid

三、调试

启动gdb后,开始调试,常用的调试命令如下:

satrt:执行程序,停在main函数第一行语句前面,等待命令

run(r):运行程序,停在断点处,等待命令

break(b):设置断点,后面可添加行号,函数名,条件等等

continue(c):继续执行程序,到下一个断点处或结束程序

next(n):单步调试,遇到函数调用时,不进入函数体

step(s):单步调试,遇到函数调用时,进入函数体

finish:运行到当前函数返回后停止,等待命令

info(i) locals:查看当前堆栈页局部变量的值

info(i) break(b):查看断点信息

set:设定参数的值,后面添加变量名和对应的值

print(p):打印值,后面可添加变量名,表达式,函数调用

clear:清除断点,后面添加行号

delete breakpoints:清除所有断点

quit(q):退出调试

四、其他命令

在调试中,有很多方便调试的命令,如下:

list 可用于查看源码,后面可以添加行号(显示行号为中心的前后5行代码)、函数名(显示所在函数的源代码)、无(继续显示程序的源代码,每次10行)。

layout 可用于分割窗口,一遍查看代码,一遍调试。后面可以添加src(显示源码)、asm(显示反汇编)等等。

上面两个命令配合使用,效果更佳。

注:在分割窗口情况下,显示内容会出现覆盖,窜行等现象,可以使用Ctrl + L来刷新窗口。

转载地址:https://blog.csdn.net/weixin_34017915/article/details/117008203 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:c语言编写扫雷小游戏下载大全,C语言实现扫雷小游戏
下一篇:C语言handler类作用,Handle的原理(Looper、Handler、Message三者关系)

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2024年04月02日 13时13分14秒