基于Linux调试工具strace与gdb的常用命令总结


Posted in PHP onJune 03, 2013

strace和gdb是Linux环境下的两个常用调试工具,这里是个人在使用过程中对这两个工具常用参数的总结,留作日后查看使用。
strace调试工具
strace工具用于跟踪进程执行时的系统调用和所接收的信号,包括参数、返回值、执行时间。在Linux中,用户程序要访问系统设备,必须由用户态切换到内核态,这是通过系统调用发起并完成的。
strace常用参数:
-c

统计每种系统调用执行的时间、调用次数、出错次数,程序退出时给出报告
-p pid

跟踪指定的进程,可以使用多个-p同时跟踪多个进程
-o filename

strace默认输出到stdout,-o可以将输出写入到指定的文件
-f

跟踪由fork产生的子进程的系统调用
-ff

常与-o选项一起使用,不同进程(子进程)产生的系统调用输出到各个filename.pid文件中
-F

尝试跟踪vfork子进程系统调用,注意:与-f同时使用时, vfork不被跟踪
-e expr

输出过滤表达式,可以过滤掉不想输出的strace结果
-e trace=set

指定跟踪set中的系统调用
-e trace=network

跟踪与网络有关的所有系统调用
-e strace=signal

跟踪所有与系统信号有关的系统调用
-e trace=ipc

跟踪所有与进程通讯有关的系统调用
-e signal=set

指定跟踪set中的信号
-e read=set

输出从指定文件中读出的数据,例如-e read=3,5
-e write=set

输出写入到指定文件中的数据,例如-e write=1
-r

打印每一个系统调用的相对时间
-t

在输出中的每一行前加上时间信息
-tt

在输出中的每一行前加上时间信息,时间精确到微秒级
-ttt

在输出中的每一行前加上时间信息,输出为相对时间
-s

指定每一行输出字符串的长度(默认为32)
strace使用举例:
strace -t whoami  #跟踪whoami可执行程序,每行输出结果前打印执行的时间
strace -p 17151 -p 17152 -p 17153  #同时跟踪进程17151、17152、17153
strace -f -e trace=read,write -p 17151 -o log  #跟踪进程17151及子进程中read和write系统调用,输出到log文件
gdb调试工具
GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。gcc编译时加上-g参数,可以使可执行程序加上gdb调试信息。
(1)info
简写:i,列出gdb子命令的信息,如info break,info variables,info stack等。
(2)list [file:]function
简写:l,查看当前行的上下文,默认为10行,也可以设置在某个函数处列出源码。
(3)edit [file:]function
简写:e,编辑当前所在的行,也可以编辑某个函数的源码。
(4)break [file:]function
简写:b,设置断点,可以设置在某行或某个函数处。
(5)run [arglist]
简写:r,运行程序至断点处停住,run命令之后可以加上调试程序需要的参数。
(6)next
简写:n,单条语句执行。
(7)continue
简写:c,继续运行程序至下一个断点。
(8)print
简写:p,打印变量的值。
(9)bt
查看函数堆栈信息。
(10)enter
回车键,重复上一次调试命令。
(11)help [name]
显示指定的gdb命令的帮助信息。
(12)quit
简写:q,退出gdb。

PHP 相关文章推荐
PHP 根据IP地址控制访问的代码
Apr 22 PHP
ThinkPHP后台首页index使用frameset时的注意事项分析
Aug 22 PHP
Php-Redis安装测试笔记
Mar 05 PHP
PHP中ID设置自增后不连续的原因分析及解决办法
Aug 21 PHP
magento后台无法登录解决办法的两种方法
Dec 09 PHP
laravel实现分页样式替换示例代码(增加首、尾页)
Sep 22 PHP
laravel实现按时间日期进行分组统计方法示例
Mar 23 PHP
php使用lua+redis实现限流,计数器模式,令牌桶模式
Apr 04 PHP
在 Laravel 项目中使用 webpack-encore的方法
Jul 21 PHP
Laravel基础-关于引入公共文件的两种方式
Oct 18 PHP
Yii redis集合的基本使用教程
Jun 14 PHP
php swoft框架实例用法
Dec 22 PHP
linux命令之调试工具strace的深入分析
Jun 03 #PHP
如何使用Strace调试工具
Jun 03 #PHP
鸡肋的PHP单例模式应用详解
Jun 03 #PHP
phpize的深入理解
Jun 03 #PHP
PHP不用第三变量交换2个变量的值的解决方法
Jun 02 #PHP
基于php socket(fsockopen)的应用实例分析
Jun 02 #PHP
深入PHP操作MongoDB的技术总结
Jun 02 #PHP
You might like
PHP实现文件安全下载
2006/10/09 PHP
php生成EXCEL的东东
2006/10/09 PHP
php 显示指定路径下的图片
2009/10/29 PHP
php数组函数序列之array_push() 数组尾部添加一个或多个元素(入栈),返回新长度。
2011/11/07 PHP
ThinkPHP模板引擎之导入资源文件方法详解
2014/06/18 PHP
PHP 5.3新增魔术方法__invoke概述
2014/07/23 PHP
Laravel中七个非常有用但很少人知道的Carbon方法
2017/09/21 PHP
PHP实现的解汉诺塔问题算法示例
2018/08/06 PHP
php curl优化下载微信头像的方法总结
2018/09/07 PHP
用js实现随机返回数组的一个元素
2007/08/13 Javascript
判断javascript的数据类型(示例代码)
2013/12/11 Javascript
jquery ajax 局部无刷新更新数据的实现案例
2014/02/08 Javascript
JavaScript字符串对象charAt方法入门实例(用于取得指定位置的字符)
2014/10/17 Javascript
超链接怎么正确调用javascript函数
2016/05/23 Javascript
浅谈JS中的!=、== 、!==、===的用法和区别
2016/09/24 Javascript
EasyUI学习之DataGird分页显示数据
2016/12/29 Javascript
Bootstrap Scrollspy源码学习
2017/03/02 Javascript
使用 Node.js 对文本内容分词和关键词抽取
2017/05/27 Javascript
Vuex 进阶之模块化组织详解
2018/01/12 Javascript
JS实现横向轮播图(中级版)
2020/01/18 Javascript
Python运行的17个时新手常见错误小结
2012/08/07 Python
用Python从零实现贝叶斯分类器的机器学习的教程
2015/03/31 Python
在Python中处理日期和时间的基本知识点整理汇总
2015/05/22 Python
使用django实现一个代码发布系统
2019/07/18 Python
基于Python实现ComicReaper漫画自动爬取脚本过程解析
2019/11/11 Python
解决Keras 自定义层时遇到版本的问题
2020/06/16 Python
夏尔巴人登珠峰品牌:Sherpa Adventure Gear
2018/02/08 全球购物
英文版销售经理个人求职信
2013/11/20 职场文书
电台实习生求职信
2014/02/25 职场文书
保卫钓鱼岛口号
2014/06/20 职场文书
个人自荐书怎么写
2015/03/26 职场文书
小学教研工作总结2015
2015/05/13 职场文书
2015年度公共机构节能工作总结
2015/05/26 职场文书
大学运动会通讯稿
2015/07/18 职场文书
社区低保工作总结2015
2015/07/23 职场文书
Python常用配置文件ini、json、yaml读写总结
2021/07/09 Python