gdb gdbtui
1. gdbtui
打开tui模式
gdbtui a.out
gdb -tui a.out调试一个正在运行的进程
gdb -p pid
在linux自带的终端里是正常显示的,但是在securecrt里面,可能由于编码的问题,边缘会有些乱码,不过不影响使用(如果你的程序有错误输出,会扰乱整个界面,所以在调试的时候,建议添加2>/dev/null,这样的话基本可用)
(gdb) info win 查看当前focusSRC (36 lines) <has focus>CMD (18 lines)
(gdb) fs next 切换focus
Focus set to CMD window.
(gdb) info win SRC (36 lines)CMD (18 lines) <has focus>
(gdb) fs SRC 切换指定focus
Focus set to SRC window.
(gdb)
上面是src窗口,下面是cmd窗口,默认focus在src窗口的,这样的话上下键以及pagedown,pageup都是在移动显示代码,并不显示上下的调试命令
2. gdb常用命令
start //开始执行程序,停在main函数第一行语句前面等待命令
directory path //添加一个路径,解决No such file or directory
print(p) //打印变量内容
continue(c) //继续执行被调试程序,直至下一个断点或程序结束
info(i) cmd //列出指令信息
info locals //查看所有局部变量
delete [num] //删除断点
display var //跟踪查看一个变量,每次停下来都显示它的值(取消undisplay)
backtrace(bt) //查看各级函数调用及参数
set var= //修改变量的值
sharedlibrary lib //调试动态库
until [line] //结束当前循环(,并跳到指定行)
finish //跳出当前函数
return val //跳出当前函数,并且返回指定值
i locals //当前函数局部变量
cd //切换目录
pwd //显示当前路径
shell cmd //执行shell命令
make //调试中编译程序
3. gdb传入参数
(gdb) r 2 3
相当于:
# ./a.out 2 3
4. 格式数据
(gdb) p/x temp[35]
$29 = 0xd
x 按十六进制格式显示变量
d 按十进制格式显示变量
u 按十六进制格式显示无符号整型
o 按八进制格式显示变量
t 按二进制格式显示变量
a 按十六进制格式显示变量
c 按字符格式显示变量
f 按浮点数格式显示变量
5. core文件
# gdb a.out core
where
6. 调试子进程
(gdb) set follow-fork-mode child
这样就可以断到子进程里面了,否则断点无效
7. 线程调试
info threads:显示当前可调试的所有线程,每个线程会有一个GDB为其分配的ID,后面操作线程的时候会用到这个ID。 前面有*的是当前调试的线程
thread ID:切换当前调试的线程为指定ID的线程
(gdb) i threads * 2 Thread 0x7ffff7fe9710 (LWP 70799) 0x0000003249aa6820 in sleep () from /lib64/libc.so.61 Thread 0x7ffff7feb700 (LWP 70797) main () at thread.c:26
(gdb) t 1
[Switching to thread 1 (Thread 0x7ffff7feb700 (LWP 70797))]#0 main () at thread.c:26
26 while(1);
(gdb) i threads 2 Thread 0x7ffff7fe9710 (LWP 70799) 0x0000003249aa6820 in sleep () from /lib64/libc.so.6* 1 Thread 0x7ffff7feb700 (LWP 70797) main () at thread.c:26
(gdb) set scheduler-locking off|on|step
多线程同时执行一段代码。off 不锁定任何线程,也就是所有线程都执行,这是默认值。 on 只有当前被调试程序会执行
8. watch
watch通常需要和break,run,continue联合使用
(gdb) watch a //观察a的值,当有变化时,停止
(gdb) watch *(long*)(a+4)
9. break
(gdb) b main
(gdb) b test.c:main
(gdb) b thread.c:26
(gdb) b test::test
10. 编译时附加编译选项
# CFLAGS="-g -O0" CPPFLAGS=-g ./configure
O0不进行编译优化,调试的时候就会顺畅了,运行流程不会跳来跳去的。发布项目的时候记得不要在使用 -O0参数项,gcc 默认编译或加上-O2优化编译会提高程序运行速度
前提:你的可执行文件和源码是一一对应的
当然,你不加优化也可以,直接-g即可
11. 如果出现如下错误
GDB调试时,提示动态库搜索路径有误。设置动态库搜索路径即可
应用如下命令:set sysroot、set solib-absolute-prefix或set solib-search-path
区别:
- set sysroot 与 set solib-absolute-prefix 是同一条命令
- set solib-search-path可设置多个搜索路径,路径之间以“冒号”分隔
- solib-absolute-prefix设置库的绝对路径;solib-search-path绝对路径和相对路径均可
gdb gdbtui相关推荐
- linux下gdb单步调试
用 GDB调试程序 GDB 概述 ---- GDB 是 GNU开源组织发布的一个强大的 UNIX下的程序调试工具.或许,各位比较喜欢那种图形界面方式的,像 VC. BCB等 IDE的调试,但如果你是在 ...
- gdb 调试命令的使用及总结
GDB: The GNU Project Debugger:http://www.gnu.org/software/gdb/documentation/ 参考:http://www.jianshu.c ...
- eclipse gdb gdbserver 远程调试
https://blog.csdn.net/linuxarmsummary/article/details/44975495 我们在 Linux 主机中搭建我们的开发环境,使用 Ubuntu 10.0 ...
- gdb TUI界面快捷键
TUI(TextUser Interface)为GDB调试的文本用户界面,可以方便地显示源代码.汇编和寄存器文本窗口. Tui界面可以通过运行gdbtui或gdb-tui命令进入(其它变种gdb也一 ...
- alin的学习之路(Linux系统编程:三)(vim,gcc,库,gdb)
alin的学习之路(Linux系统编程:三)(vim,gcc,库,gdb) 1.vim的使用 vim有三种模式:命令模式,末行模式,编辑模式 光标的移动[命令模式] h 向左 ,j 向下,k 向上,l ...
- android gdb 命令大全,ndk-gdb | Android NDK | Android Developers
NDK 包含一个名为 ndk-gdb 的 Shell 脚本,可以启动命令行原生调试会话.偏好使用 GUI 的用户则应阅读在 Android Studio 中调试这篇文档. 要求 要运行命令行原生调试, ...
- Git/Ctags/Vim/GDB基础笔记
>>>>>>>>>>>>>>>>>>>>>>>>> ...
- gdb常用调试命令汇总!
在debug模式下,使用GDB进行调试,可以使用的命令汇总如下: (gdb) p *(*pHead)->next 这里声明语句ListNode** pHead,表示查看*pHead执行链表节 ...
- 一文带你看透 GDB 的 实现原理 -- ptrace真香
文章目录 Ptrace 的使用 GDB 的基本实现原理 Example1 通过ptrace 修改 被追踪进程的内存数据 Example2 通过ptrace 对被追踪进程进行单步调试 Ptrace的实现 ...
最新文章
- 在js中使用HashMap数据结构,在js中使用K,V数据结构
- 基于PyTorch的Seq2Seq翻译模型详细注释介绍(一)
- 2017《面向对象程序设计》寒假作业一
- react native windows 搭建(完整版)
- 你了解 Assembly.Load 吗?
- java string.join找不到_Java String join()用法及代码示例
- 元宇宙时代,技术长什么样
- python编程学习_使用EduBlocks轻松学习Python编程
- 基于JAVA+SpringMVC+Mybatis+MYSQL的羽毛球场预约管理系统
- [D3] Start Visualizing Data Driven Documents with D3 v4
- 获取会话的连接和断开事件
- docker技术之基本命令
- CentOS 6.3最小化安装后,有些必备工作才可以正常使用
- windows下yafu的下载及其安装
- 什么是Wiegand协议?什么是韦根26? 什么是韦根34?
- Android开发之音乐播放器
- Linux 编程 —— 进程间的通信 之 消息队列(zmq socket 学习笔记)
- 华为交换机默认vlan都是通的吗_最全的华为交换机vlan配置教程
- 2022年终工作总结PPT模板来了~
- 分享一个简单的抢购华为商城手机的js脚本,仅供学习交流
热门文章
- winform水晶报表中添加图片
- 2022考研真题+汤家凤网课视频。祝2022考研朋友顺利上岸!
- 计算机毕业设计ssm高校教室申请管理系统yf80k系统+程序+源码+lw+远程部署
- 高性能MySQL(第四版):一、MySQL架构
- 【CSDN竞赛第25期】赢热门图书《千脑智能》和定制周边
- 【**背包dp**】
- 计算机企业人员的职称有哪些,企业IT人员评职称需要什么资质
- 影视剪辑,你应该掌握的剪辑流程和技巧
- java 试题_Java笔试题完整试卷
- 前端|利用模态框(Modal)实现弹窗效果