基于Linux调试工具strace与gdb的常用命令总结
2023-06-13 09:15:00 时间
strace和gdb是Linux环境下的两个常用调试工具,这里是个人在使用过程中对这两个工具常用参数的总结,留作日后查看使用。
strace调试工具
strace工具用于跟踪进程执行时的系统调用和所接收的信号,包括参数、返回值、执行时间。在Linux中,用户程序要访问系统设备,必须由用户态切换到内核态,这是通过系统调用发起并完成的。
strace常用参数:
-c 统计每种系统调用执行的时间、调用次数、出错次数,程序退出时给出报告
-ppid 跟踪指定的进程,可以使用多个-p同时跟踪多个进程
-ofilename strace默认输出到stdout,-o可以将输出写入到指定的文件
-f 跟踪由fork产生的子进程的系统调用
-ff 常与-o选项一起使用,不同进程(子进程)产生的系统调用输出到各个filename.pid文件中
-F 尝试跟踪vfork子进程系统调用,注意:与-f同时使用时,vfork不被跟踪
-eexpr 输出过滤表达式,可以过滤掉不想输出的strace结果
-etrace=set 指定跟踪set中的系统调用
-etrace=network 跟踪与网络有关的所有系统调用
-estrace=signal 跟踪所有与系统信号有关的系统调用
-etrace=ipc 跟踪所有与进程通讯有关的系统调用
-esignal=set 指定跟踪set中的信号
-eread=set 输出从指定文件中读出的数据,例如-eread=3,5
-ewrite=set 输出写入到指定文件中的数据,例如-ewrite=1
-r 打印每一个系统调用的相对时间
-t 在输出中的每一行前加上时间信息
-tt 在输出中的每一行前加上时间信息,时间精确到微秒级
-ttt 在输出中的每一行前加上时间信息,输出为相对时间
-s 指定每一行输出字符串的长度(默认为32)
strace使用举例:
strace-twhoami #跟踪whoami可执行程序,每行输出结果前打印执行的时间
strace-p17151-p17152-p17153 #同时跟踪进程17151、17152、17153
strace-f-etrace=read,write-p17151-olog #跟踪进程17151及子进程中read和write系统调用,输出到log文件
gdb调试工具
GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。gcc编译时加上-g参数,可以使可执行程序加上gdb调试信息。
(1)info
简写:i,列出gdb子命令的信息,如infobreak,infovariables,infostack等。
(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。
-ppid 跟踪指定的进程,可以使用多个-p同时跟踪多个进程
-ofilename strace默认输出到stdout,-o可以将输出写入到指定的文件
-f 跟踪由fork产生的子进程的系统调用
-ff 常与-o选项一起使用,不同进程(子进程)产生的系统调用输出到各个filename.pid文件中
-F 尝试跟踪vfork子进程系统调用,注意:与-f同时使用时,vfork不被跟踪
-eexpr 输出过滤表达式,可以过滤掉不想输出的strace结果
-etrace=set 指定跟踪set中的系统调用
-etrace=network 跟踪与网络有关的所有系统调用
-estrace=signal 跟踪所有与系统信号有关的系统调用
-etrace=ipc 跟踪所有与进程通讯有关的系统调用
-esignal=set 指定跟踪set中的信号
-eread=set 输出从指定文件中读出的数据,例如-eread=3,5
-ewrite=set 输出写入到指定文件中的数据,例如-ewrite=1
-r 打印每一个系统调用的相对时间
-t 在输出中的每一行前加上时间信息
-tt 在输出中的每一行前加上时间信息,时间精确到微秒级
-ttt 在输出中的每一行前加上时间信息,输出为相对时间
-s 指定每一行输出字符串的长度(默认为32)
strace-p17151-p17152-p17153 #同时跟踪进程17151、17152、17153
strace-f-etrace=read,write-p17151-olog #跟踪进程17151及子进程中read和write系统调用,输出到log文件
(1)info
简写:i,列出gdb子命令的信息,如infobreak,infovariables,infostack等。
(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。
相关文章
- Linux权限管理:详解权限工具(linux权限工具)
- LINUX下使用禅道工具快速启动(linux禅道启动)
- 设置Linux下调整特殊权限的技巧(linux特殊权限)
- 深入Linux环境下Java应用调试实践(linux调试java)
- Linux下掌握常用命令,提高工作效率(linux常用命令有哪些)
- 服务器提升企业效率,Linux 公司服务器助力升级(linux公司)
- 分析Linux内核源文件精解:分析构建内核调试基础(linux内核源文件)
- 挖掘Linux系统FTP软件之旅(linux的ftp软件)
- Linux 开发:编程、调试、运维全部一手掌控(linux开发什么)
- Linux下安装虚拟机轻松搞定(linux安装虚拟机工具)
- Linux分支:激活开源世界的力量(linux的分支)
- 系Linux的分支系统:从入门到精通(linux的分支)
- Linux下串口调试:从监听开始(linux串口监听)
- Linux软件升级:实现最佳性能(linux软件升级)
- 探究纤程 Linux:为何它成为开发者不可或缺的工具?(纤程linux)
- Linux链接工具概览(linux链接工具)
- 拥抱 Linux:成为一名开发工程师(linux开发工程师)
- IDA Linux调试:最专业的调试工具(idalinux调试)
- 快速实现 Linux 上传 FTP 数据传输(linux上传ftp)
- Linux下网络攻击实战:有效防御策略(linux网络攻击工具)
- Linux自动化部署:让你的工作变得更有效率(linux自动化部署)
- 红旗Linux光盘:开源软件的必备工具(红旗linux光盘)
- 基于QEMU调试Linux内核(qemu 调试linux)
- Linux时间更改:快捷操作窍门(linux 时间更改)
- 如何查看Linux系统进程?(查看linux系统进程)
- Linux NC工具实现快速文件传输(linux nc传输文件)
- Linux内存使用分析:妙用命令行工具(查linux内存使用情况)
- Linux中的进程监控:利用工具保障系统安全(linux 进程监控工具)