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

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。

(0)

相关推荐

  • gdb调试命令的使用及总结

    1.基本命令 1)进入GDB #gdb test test是要调试的程序,由gcc test.c -g -o test生成.进入后提示符变为(gdb) . 2)查看源码 (gdb) l 源码会进行行号提示. 如果需要查看在其他文件中定义的函数,在l后加上函数名即可定位到这个函数的定义及查看附近的其他源码.或者:使用断点或单步运行,到某个函数处使用s进入这个函数. 3)设置断点 (gdb) b 6 这样会在运行到源码第6行时停止,可以查看变量的值.堆栈情况等:这个行号是gdb的行号. 4)查看断点

  • 使用GDB调试多线程实例详解

    先写一段多线程程序. makefile 加上 -g参数生成可调式信息, 可以进行调试. pthread不是Linux下的默认的库,也就是在链接的时候,无法找到phread库中哥函数的入口地址,于是链接会失败.在gcc编译的时候,附加要加 -lpthread参数即可解决. gdb test 进入调试 需要调试的地方打下断点,run运行到断点处. r 运行到断点处,info thread可以查看被调试的线程. thread apply all bt 让所有线程打印堆栈信息 set scheduler

  • 基于c语言中调试工具的用法汇总(不包含gdb)

    是不是只有编译的时候才知道程序写了错误?有没有在未编译的时候就让机器帮你检查错误的工具呢?答案是:有!! splint工具.用一个最简单的HELLO WORLD来表述:===================================== 复制代码 代码如下: /*错误很明显*/#include <stdio.h> int main(void){   print("hello world\n", s);   return} -----------------------

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

    strace和gdb是Linux环境下的两个常用调试工具,这里是个人在使用过程中对这两个工具常用参数的总结,留作日后查看使用.strace调试工具strace工具用于跟踪进程执行时的系统调用和所接收的信号,包括参数.返回值.执行时间.在Linux中,用户程序要访问系统设备,必须由用户态切换到内核态,这是通过系统调用发起并完成的.strace常用参数:-c 统计每种系统调用执行的时间.调用次数.出错次数,程序退出时给出报告-p pid 跟踪指定的进程,可以使用多个-p同时跟踪多个进程-o file

  • Linux应用调试使用gdb和gdbserver命令详解

    1.gdb和gdbserver调试原理 通过linux虚拟机里的gdb,来向开发板里的gdbserver发送命令,比如设置断点,运行setp等,然后开发板上的gdbserver收到命令后,便会执行应用程序做相应的动作,来实现调试的功能 和之前学的裸板GDB调试 一样,只不过之前学的是在win下的,本次是在linux里的gdb 1.1同样,它们都会需要一个带调试信息的编译文件. 通过Makefile里的arm-linux-gcc  -g 来的,     -g:表示编译文件里包含gdb调试信息 1.

  • Linux中RPM文件操作的常用命令总结

    简介 众所周知在Linux操作系统中,有一个系统软件包,它的功能类似于Windows里面的"添加/删除程序",但是功能又比"添加/删除程序"强很多,它就是Red Hat Package Manager(简称RPM).本文介绍的就是关于Linux中RPM文件操作的常用命令,下面话不多说,来一起看看吧. 一.RPM 安装操作 命令: rpm -i 需要安装的包文件名 举例如下: rpm -i example.rpm 安装 example.rpm 包: rpm -iv e

  • linux iptables防火墙中的工作常用命令

    目录 linux iptables防火墙-工作常用命令 Linux之iptables防火墙基础 iptables命令行配置方法 查看iptables防火墙规则 关闭某个端口(注意同时添加ip或接口的限制)\iptables 配置只能本地ip访问某端口 防火墙规则放开自己的ip,让自己的ip可以访问 iptables永久生效 报错:The service command supports only basic LSB actions (start, stop, restart, try-resta

  • linux命令之调试工具strace的深入分析

    参考1<linux的strace命令(详解).txt> 新浪电子书可下载2man strace一个基本上通用的 完整的用法:strace -o output.txt -T -tt -e trace=all -p 28979上面的含义是 跟踪28979进程的所有系统调用(-e trace=all),并统计系统调用的花费时间,以及开始时间(并以可视化的时分秒格式显示),最后将记录结果存在output.txt文件里面.必须记住的几个用法1)strace -p pid  可以跟踪某个后台进程2)str

  • Linux调试工具GDB使用简易教程

    本文所述主要是Linux调试工具GDB的使用教程,具体如下. 声明:本博客内容是由本人经过实验楼教程整理得来. GDB的相关概念 GDB, 是 The GNU Project Debugger 的缩写, 是 Linux 下功能全面的调试工具.GDB 支持断点.单步执行.打印变量.观察变量.查看寄存器.查看堆栈等调试手段.在 Linux 环境软件开发中,GDB 是主要的调试工具,用来调试 C 和 C++ 程序. GDB的相关操作 下面给出一个具有buging.c的程序: [yqtao@localh

  • 基于Python os模块常用命令介绍

    1.os.name---判断现在正在实用的平台,Windows返回'nt':linux返回'posix' 2.os.getcwd()---得到当前工作的目录. 3.os.listdir()--- 4.os.remove---删除指定文件 5.os.rmdir()---删除指定目录 6.os.mkdir()---创建目录(只能创建一层) 7.os.path.isfile()---判断指定对象是否为文件.是则返回True. 8.os.path.isdir()---判断指定对象是否为目录 9.os.p

  • linux 操作 ftp 常用命令

    简介: FTP(File Transfer Protocol, FTP)是TCP/IP网络上两台计算机传送文件的协议,FTP是在TCP/IP网络和INTERNET上最早使用的协议之一,它属于网络协议组的应用层.FTP客户机可以给服务器发出命令来下载文件,上载文件,创建或改变服务器上的目录.  概述: FTP是应用层的协议,它基于传输层,为用户服务,它们负责进行文件的传输.FTP是一个8位的客户端-服务器协议,能操作任何类型的文件而不需要进一步处理,就像MIME或Unencode一样.但是,FTP

  • 详解Linux防火墙iptables禁IP与解封IP常用命令

    在Linux服务器被攻击的时候,有的时候会有几个主力IP.如果能拒绝掉这几个IP的攻击的话,会大大减轻服务器的压力,说不定服务器就能恢复正常了. 在Linux下封停IP,有封杀网段和封杀单个IP两种形式.一般来说,现在的攻击者不会使用一个网段的IP来攻击(太招摇了),IP一般都是散列的.于是下面就详细说明一下封杀单个IP的命令,和解封单个IP的命令. Linux防火墙:iptables禁IP与解封IP常用命令 在Linux下,使用ipteables来维护IP规则表.要封停或者是解封IP,其实就是

  • Linux简介及最常用命令(简单易学,但能解决95%以上的问题)

    Linux是目前应用最广泛的服务器操作系统,基于Unix,开源免费,由于系统的稳定性和安全性,市场占有率很高,几乎成为程序代码运行的最佳系统环境.linux不仅可以长时间的运行我们编写的程序代码,还可以安装在各种计算机硬件设备中,如手机.路由器等,Android程序最底层就是运行在linux系统上的. 一.linux的目录结构 bin  (binaries)存放二进制可执行文件 sbin  (super user binaries)存放二进制可执行文件,只有root才能访问 etc (etcet

随机推荐