gdb gdbtui
1. gdbtui
打开tui模式
gdbtui a.out
gdb -tui a.out调试一个正在运行的进程
gdb -p pid
在linux自带的终端里是正常显示的,但是在securecrt里面,可能由于编码的问题,边缘会有些乱码,不过不影响使用(如果你的程序有错误输出,会扰乱整个界面,所以在调试的时候,建议添加2>/dev/null,这样的话基本可用)
(gdb) info win 查看当前focus
SRC (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) //打印变量内容
info(i) cmd //列出指令信息
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.6
1 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的更多相关文章
- MYSQL在线注释文档--- 在gdb中显示源码(gdbtui使用方法)----赖明星的个人博客
http://mingxinglai.com/cn/2013/07/gdbtui/ MySQL源码注释与类图 http://mingxinglai.com/cn/2015/08/mysql-annot ...
- linux包之gdb之gdb命令与core文件产生
gdb-7.2-64.el6_5.2.x86_64/usr/bin/gcore/usr/bin/gdb/usr/bin/gdb-add-index/usr/bin/gdbtui/usr/bin/gst ...
- 用Eclipse和GDB构建ARM交叉编译和在线调试环境
我们在 Linux 主机中搭建我们的开发环境,使用 Ubuntu 10.04 LTS 为例. 搭建应用开发环境 安装 JRE Eclipse 依赖于Java 环境,所以必须先安装 JRE 或 JD ...
- gdb tui中切换窗口
gdb的gui用法 调试代码的时候,只能看到下一行,每次使用list非常烦,不知道当前代码的context http://beej.us/guide/bggdb/#compiling 简单来说就是在 ...
- gdb各种调试命令和技巧
陈皓:用GDB调试程序 GDB概述———— GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具.或许,各位比较喜欢那种图形界面方式的,像VC.BCB等IDE的调试,但如果你是在UNIX平台 ...
- 关于 cgdb & gdbtui 的输入scanf()问题
使用cgdb 和 gdbtui 调试程序时, 遇到scanf函数时 it seems to enter into an infinite loop According to the info page ...
- 安装GDB和GDBSERVER
安装GDB和GDBSERVER 转自http://www.360doc.com/content/10/0407/17/155970_21971613.shtml 把GDBSERVER装入文件系统 转自 ...
- linux应用调试技术之GDB和GDBServer
1.调试原理 GDB调试是应用程序在开发板上运行,然后在PC机上对开发板上得应用程序进行调试,PC机运行GDB,开发板上运行GDBServer.在应用程序调试的时候,pc机上的gdb向开发板上的GDB ...
- 新手如何在gdb中存活
网络上已经有很多gdb调试的文章了,为什么我还要写这篇文章呢,因为本文是写给gdb新手的,目的就是通过一个简单的例子来让新手很快上手.一旦上手入门了,其他的问题就可以自己去搜索搞定了.右边是gdb的L ...
随机推荐
- 201871010108-高文利《面向对象程序设计(java)》第十六周学习总结
项目 内容 这个作业属于哪个课程 <任课教师博客主页链接> https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 <作业链接地址> ht ...
- day7_7.5 字符表与文件操作
一.字符编码. 1. 在计算机的运行中,有三大部分组成,计算机硬件,操作系统,应用程序,当使用者在使用文档编写文字时,所显示的所有字符都存储在内存中,随后再存储在硬盘里,(仅限文字),所以,当美国人发 ...
- 莫烦TensorFlow_08 tensorboard可视化进阶
import tensorflow as tf import numpy as np import matplotlib.pyplot as plt # # add layer # def add_l ...
- Sring StringBuffer StringBuilder封装类
Sring StringBuffer StringBuilder封装类 一.String类常见方法的使用 字符串数据都是一个对象 字符串数据一旦初始化就不可以被改变 字符串对象都存储于常量池中,字符串 ...
- python 之Entry
# Tkinter教程之Entry篇 # Entry用来输入单行文本 from tkinter import * root = Tk() # 创建entry Entry(root, text='inp ...
- CPU-bound(计算密集型) 和I/O bound(I/O密集型)/数据密集型
https://blog.csdn.net/q_l_s/article/details/51538039 I/O密集型 (CPU-bound)I/O bound 指的是系统的CPU效能相对硬盘/内存的 ...
- The Preliminary Contest for ICPC Asia Shanghai 2019 C. Triple
[传送门] FFT第三题! 其实就是要求有多少三元组满足两短边之和大于等于第三边. 考虑容斥,就是枚举最长边,另外两个数组里有多少对边之和比它小,然后就是 $n^3$ 减去这个答案. 当 $n \le ...
- PassGuard密码控件配置
运行环境 win服务器 系统server2008R2 C# ASP.NET服务器页面 前端部分 1.引用 //JS部分引用 <script type="text/javasc ...
- [LeetCode] 76. Minimum Window Substring 最小窗口子串
Given a string S and a string T, find the minimum window in S which will contain all the characters ...
- [原创]浅谈在创业公司对MVP的理解
[原创]浅谈在创业公司对MVP的理解 目前自已所处的公司类似一个创业平台,我们内部会不断的去孵化不同方向的产品,产品经理经常谈到的一个词就是MVP,所以有必需要去了解下什么是MVP? 1 什么是MVP ...