gdb 脚本 简单理解
1. gdb 脚本的语法简介:
摘录博客:https://blog.csdn.net/hejinjing_tom_com/article/details/50350865
1] # 为脚本注释命令
2] 赋值语句:set, 变量以$开始,以便区分是gdb还是调试程序变量。
变量可为全局或局部,视声明位置。
例如:
set $x = 1;
3] 函数声明语句:define .. end 语句
define func
end
无行参声明,但可以直接用$arg1,$arg2引用, $argc 为形参个数
函数语句开头不需要添加空格或tab键
4] 说明(帮助)语句: document.. end
为函数书写帮助说明,格式如下。
define func
end
5] 显示语句: printf
还可以用 echo
6] 条件语句: if..else..end
7] 循环语句: while .. end
8] 常规的gdb 调试命令语句。
9] 支持shell 命令, 可以实现dump, search 等复杂功能
注意:
gdb中使用的变量要加上'$'符号,否则会认为是被调试的程序中的变量
自定义的gdb命令脚本文件,可以用source 命令来导入。
上面是 几条简单语句,进一步学习 请参考:http://ifeve.com/gdb-script/
2. 写一个gdb脚本,可跟踪某个变量为某数值时,执行添加的断点
term.gdb 的内容如下:
#fileName : term.gdb
#define a function to set break_point define term if $argc != 2
help term
else set $lineNum = $arg0
set $val = $arg1 printf "set b in file.c:%d if ix==%d \n", $lineNum, $val
break file.c:$lineNum if ix == $val end end document term
usage: term lineNum val
end
test.c 文件内容如下
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h> int main()
{
int ix = 0;
for(ix = 0; ix < 100; ix++)
{
printf("ix = %d\n", ix);
usleep(1000*1000);
} return 0;
}
gdb 脚本 简单理解的更多相关文章
- 简单理解php的socket连接
socket建立套接的过程图: 首先了解socket 几个主要函数: socket的关键函数1: socket_create($net参数1,$stream参数2,$protocol参数3) 作用:创 ...
- 【原创】分布式之数据库和缓存双写一致性方案解析(三) 前端面试送命题(二)-callback,promise,generator,async-await JS的进阶技巧 前端面试送命题(一)-JS三座大山 Nodejs的运行原理-科普篇 优化设计提高sql类数据库的性能 简单理解token机制
[原创]分布式之数据库和缓存双写一致性方案解析(三) 正文 博主本来觉得,<分布式之数据库和缓存双写一致性方案解析>,一文已经十分清晰.然而这一两天,有人在微信上私聊我,觉得应该要采用 ...
- input屏蔽历史记录 ;function($,undefined) 前面的分号是什么用处 JSON 和 JSONP 两兄弟 document.body.scrollTop与document.documentElement.scrollTop兼容 URL中的# 网站性能优化 前端必知的ajax 简单理解同步与异步 那些年,我们被耍过的bug——has
input屏蔽历史记录 设置input的扩展属性autocomplete 为off即可 ;function($,undefined) 前面的分号是什么用处 ;(function($){$.ex ...
- Laravel集合的简单理解
本篇文章给大家带来的内容是关于Laravel集合的简单理解,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 前言 集合通过 Illuminate\Database\Eloquent\C ...
- 关于 Promise 的一些简单理解
一.ES6 中的 Promise 1.JS 如何解决 异步问题? (1)什么是 同步.异步? 同步指的是 需要等待 前一个处理 完成,才会进行 下一个处理. 异步指的是 不需要等待 前一个处理 完成, ...
- git的简单理解及基础操作命令
前端小白一枚,最近开始使用git,于是花了2天看了廖雪峰的git教程(偏实践,对于学习git的基础操作很有帮助哦),也在看<git版本控制管理>这本书(偏理论,内容完善,很不错),针对所学 ...
- 简单理解Struts2中拦截器与过滤器的区别及执行顺序
简单理解Struts2中拦截器与过滤器的区别及执行顺序 当接收到一个httprequest , a) 当外部的httpservletrequest到来时 b) 初始到了servlet容器 传递给一个标 ...
- [转]简单理解Socket
简单理解Socket 转自 http://www.cnblogs.com/dolphinX/p/3460545.html 题外话 前几天和朋友聊天,朋友问我怎么最近不写博客了,一个是因为最近在忙着公 ...
- Js 职责链模式 简单理解
js 职责链模式 的简单理解.大叔的代码太高深了,不好理解. function Handler(s) { this.successor = s || null; this.handle = funct ...
- Deep learning:四十六(DropConnect简单理解)
和maxout(maxout简单理解)一样,DropConnect也是在ICML2013上发表的,同样也是为了提高Deep Network的泛化能力的,两者都号称是对Dropout(Dropout简单 ...
随机推荐
- 如何在eclipse里的动态Web项目建立后缀为xml的文件
1.右击Dynamic Web Project类型项目的WEB-INF->new->Other->XML,选择XML File2 点击next改名字为web(后缀不要动哦)3. 点击 ...
- 用 go 实现多线程下载器
本篇文章我们用Go实现一个简单的多线程下载器. 1.多线程下载原理 通过判断下载文件链接返回头信息中的 Accept-Ranges 字段,如果为 bytes 则表示支持断点续传. 然后在请求头中设置 ...
- Day23:个人小结的撰写&&对coderunner的熟悉
今日完成的任务: 1.完成个人小结的撰写 2.阅读Moodle文档,了解Moodle平台以及Moodle出题格式 明日计划: 1.撰写总报告中的结论 2.将插件安装完成 每日小结: 为了研究题库,特 ...
- USB转UART的桥接控制器 国产DPU02软硬件兼容替换CP2102
DPU02是一个高度集成的USB转UART的桥接控制器,可将RS-232设计更新为USB设计,并简化PCB组件空间.该DPU02包括了一个USB 2.0全速功能控制器.USB收发器.振荡器.EEPRO ...
- go 使用mysql
package main /* 下划线(如:import _ hello/imp)的作用:当导入一个包时,该包下的文件里所有init()函数都会被执行, 然而,有些时候我们并不需要把整个包都导入进来, ...
- zk单机集群安装
参考:https://www.cnblogs.com/leeSmall/p/9563547.html zk单机集群安装 cd /usr/local 下载 wget http://mirror.bit. ...
- -behaviour()的使用,他具体有什么作用
Eralng 编程中的OTP OTP里面创建进程时 常用有四大behaviour • supervisor • gen_server • gen_fsm • gen_event 在erlang的编译器 ...
- 疾速瓜牛 Linux三剑客 之 sed学习与应用
sed, 是stream editor的缩写,顾名思义,就是个非交互式行编辑器,有以下特点: 它能执行与编辑器 vi 和 ex 相同的编辑任务 sed 编辑器没有提供交互式使用方式,使用者只能在命令行 ...
- 永久免费泛域名证书: letsencrypt
项目地址: https://github.com/Neilpang/acme.sh
- Centos7 安装Mysql8 主从数据库
前提条件 准备了两台虚拟机 mysql-master 192.168.30.199, mysql-slave 192.168.30.198 1:官网下载并安装Mysql8 1:安装mysql 1.1: ...