Linux相关——记录gdb基本操作(持续更新)
-----------2018.9.26更新标记-----------
gdb的确是个很强大的东西啊,这里记录一下gdb的基本操作吧
后续可能会补充,但暂时感觉够用了就不写多了。
首先是ubuntu终端的2个最基本的操作:(不然会gdb但是调不出终端也没用啊!)
1,cd xxxx 进入xxxx目录
2,Ctrl + Alt + T 调出终端
3,l 列出目录里有哪些文件 & 文件夹
接下来就是gdb了。
前提:编译时加上 -g 选项
比如g++ P1000.cpp -g -Wall -Wextra -o work
(在末尾加-O2可以开O2)
今天才知道-g选项其实也有很多种:
1,g0 没有任何用,等于不加-g
2,g1 只包含少量调试信息
3,g2 默认的选项,可以满足日常使用
4,g3 包含一些额外的信息,比如可以让你查看宏定义。
1,gdb work 调试work
2,gdb 进入gdb界面
3,file 进入gdb界面后可以切换调试的程序,
比如我先
gdb work -----> 现在在调试work
file work1 -----> 切换到调试work1
4,l 列出10行程序给你看
5,r运行程序
6,b xxx 在xxx行设置断点/在xxx函数设置断点
7,disp xxx 可以一直查看xxx变量(表达式),使用了之后xxx就会一直挂在上面,很方便
8,d 删除所有断点
9,undisp 1 删除第一个disp 的变量(就是disp之后变量前面那个数字)
10,undisp 删除所有disp 的变量
11,s 进入函数 + 执行下一步
12,n 不进入函数 + 执行下一步
13,watch xxx 监控xxx,如果xxx发生变化,程序将会停下并告诉了发生了哪些变化(注意这个命令要求先在变量所在处设置断点)
14,call 函数名 强制执行某个函数(需要正在运行)
又发现了一些妙妙的东西,,,
15,break 30 if n == 4 当n==4时在30行停下,其中break可以简写为b
16,clear xxx,删除第xxx行的断点,如果不记得xxx行的断点是第几个了,用这个就很方便
17,d x,删除第x个断点
18,info b,查看所有断点信息
19,info disp,查看所有disp的信息
20,l xxx,以xxx行/xxx函数为中心,输出10行源文件
21,l 50,58 (中间逗号要加!)显示50~58行源文件
22,l +/-,显示上次显示那段的上面10段/下面10段
23,set listsize xxx,自己设置每次显示的行数
24,show listsize,查看每次显示的行数
25,l ,50 以50行为结束行,输出10行
26,l 50, 以50为起始行,输出10行
27,finish 退出函数(会把这个函数跑完),简写为fin
28,info program 查看程序信息
29,disable xxx ,暂停第xxx个断点
30,enable xxx ,开启第xxx个断点
31,ctrl + L 清屏
32,bt 打印堆栈
33,frame xxx ,切换到xxx(上面bt对应的函数前的数字)
34,info locals 接33使用,切换后可以查看对应函数的局部变量信息(准确的说是当前栈层?)
35,*数组@ num 可以查看一个数组的前num项。
36, command n 设置运行到第n个断点时要看的内容,但是好像需要用c指令才可以看到?
如果不加n,那么这个内容将会被赋给最后一个断点。
示例:command 1
printf "have is %d\n", have
c
end
end表示结束
37,u 执行到当前循环结束(貌似要先跑完一次,直到遇到循环语句再执行到当前循环结束)
也就是说如果你写了:
while()
{
LL now = ;
if(s[l] == ')') {++l; return rnt % mod;}
++l;
}
然后你在LL now = 0;这行用u是没有用的,会一直运行到while(1)这一行,然后你再用u,然后就会执行到这个循环结束再显示给你
38,finish 运行到当前函数结束,如果函数有返回值,将会告诉你返回值。
39,jump 强行跳转到指定行,被跳过的内容都会被运行,如果你跳到一个后续状态中不会遇到的地方,那么将会出错。
40,return 强行return,可以返回指定值
41,tbreak 简写为tb ,创建一个临时断点,碰到一次之后这个断点就会被删除。
42,print x = 4 表示将x这个变量修改为4
43,set var x = 4 效果和上面相同
44,start 开始调试,从main开始,按程序运行顺序调试(不需要提前设置断点)。 我是不是应该把这条放到开头
偷偷记录一些其他命令:
1,ulimit -s 查看栈空间大小
2,ulimit -s xxx 将栈空间设置为xxx、
3,ulimit -a 查看有关栈空间的详细信息(可以查看一些指令的用法)
4,time 可以查看一个程序的运行时间。 使用方法: time ./work ----> 查看work这个程序的运行时间
Linux相关——记录gdb基本操作(持续更新)的更多相关文章
- Arch Linux + KDE 配置&美化(持续更新~)
Arch Linux + KDE 配置&美化(持续更新~) 这篇文章着重记录archlinux + KDE的一个基本的配置过程.不包括安装过程(使用archInstall.sh).内容大概有以 ...
- Linux相关——记一些ubuntu相关快捷键&操作(持续更新)
(有一些是windows通用的...放上来凑字数...) 1, ctrl + alt + t.调出终端,这个没什么好解释的. 2, win + s.可以快速查看打开的窗口,并进行切换 3,win + ...
- Linux 相关学习内容(不定期更新)
Linux 主要目录 / 根目录,在 linux 下有且只有一个根目录,所有的东西都是从这里开始 /bin 可执行二进制文件的目录,如常用的命令,ls, tar, mv, cat.. /boot 放置 ...
- ubuntu相关软件合集(持续更新中)
本人使用的是Ubuntu-Kylin14.04,自带了日历.输入法.优客助手等易于上手的应用.省的每次安装完原生的系统再麻烦的安装,下面介绍默认应用外的相关常用软件: 一.Keylock Applic ...
- 【Linux】常用命令,持续更新
Linux 一.linux的组成 内核,shell,文件系统,应用程序 二.linux目录结构 bin,sbin,home,root,boot,dev,etc,lib, 三.文件目录操作 ls,cd, ...
- Strus2学习记录整理【持续更新】
Strus2学习记录 以后的Strus2学习记录地址都会集合在这里,希望大家可以一起愉快学习,相互学习! Exception: 地址:http://www.cnblogs.com/gcs1995/p/ ...
- Linux文件权限管理(持续更新)
文章是从我的个人博客上粘贴过来的, 大家也可以访问我的主页 www.iwangzheng.com 以root身份登录linux以后, ls -al 可以看到 -rw-rw-r-- 1 wangzhe ...
- 面试相关-转载-well,yzl——持续更新
转载yl,yzl大神的面经,顺便自己复习一下专业课的内容 操作系统相关: 什么是进程, 什么是线程.它们之间的区别和联系. 进程管理内存资源+运行过程, 线程只管理运行过程, 线程要在进程提供的资源基 ...
- 【linux】常用命令集锦&持续更新...
滴:转载引用请注明哦[握爪]:https://www.cnblogs.com/zyrb/p/9709013.html 对深度学习训练及日常work中的常用linux命令进行整理. [一]screen ...
随机推荐
- 通过扩展方法简化UnityAPI调用
通过扩展方法简化UnityAPI调用 扩展方法unity apiapi简化 通过扩展方法简化UnityAPI调用 能省一秒是一秒,时间就是金钱,没人愿意把时间花在冗长的coding上
- 你这一辈子要用到的C数学函数都在这
两数相加 #include <stdio.h> int main(void){ int a = 10; //定义变量a, 把10 赋值给a int b = 20; //定义变量 ...
- k8s踩坑记第1篇--rc无法创建
六一快乐!!! 什么是k8s,我不想解释,百度资料有很多,本系列只踩坑,不科普. 问题描述: 做Hello World的例子,结果get pods一直显示没有资源? 应用配置代码: apiVersio ...
- AssertionError
(1)p1 = multiprocessing.Process(test1)p2 = multiprocessing.Process(target=test2) 错误: p1缺少target,应为(t ...
- java内存结构JVM——java内存模型JMM——java对象模型JOM
JVM内存结构 Java代码是要运行在虚拟机上的,而虚拟机在执行Java程序的过程中会把所管理的内存划分为若干个不同的数据区域,这些区域都有各自的用途.其中有些区域随着虚拟机进程的启动而存在,而有些区 ...
- C++ 类 析构函数
一.析构函数的定义 析构函数为成员函数的一种,名字与类名相同,在前面加‘~’没有参数和返回值在C++中“~”是位取反运算符.一个类最多只能有一个析构函数.析构函数不返回任何值,没有函数类型,也没有函数 ...
- 冲刺One之站立会议5 /2015-5-18
2015-5-18 服务器部分大体已经完工,现在我们主要是在把登陆界面和服务器组装起来,这个过程是很让人头痛的,以为其中涉及到了很多网络协议.网络编程的知识,由于之前我们没有接触过所以实现起来会觉得很 ...
- 软工1816 · 作业(十二)Beta答辩总结
组长博客 宣传视频 github团队项目仓库 本组成员 队员姓名与学号 124 王彬(组长) 206 赵畅 215 胡展瑞 320 李恒达 131 佘岳昕 431 王源 206 陈文垚 209 陈志炜 ...
- caffe添加自己的数据输入层
整体思路: 阅读caffe数据输入层各个类之间的继承关系,确定当前类需要继承的父类以及所需参数的设置. 编写zzq_data.cpp 在layer_factory.cpp中完成注册: 在caffe.p ...
- 团队作业4——第一次项目冲刺(Alpha版本)2017.11.14
1.当天站立式会议照片 本次会议在5号公寓1楼召开,本次会议内容:①:熟悉每个人想做的模块.②:根据老师的要求将项目划分成一系列小任务.③:选择项目的开发模式:jsp+servlet+javabean ...