【调试】strace命令|跟踪进程系统调用和所接收的信号|查找依赖库失败|linux

strace是一个用于追踪进程系统调用和接收信号的工具,帮助开发者诊断程序运行时的问题。本文介绍了strace的基本用法,包括跟踪参数、调试程序、解决库依赖问题及限制跟踪特定系统调用的实例。通过strace,我们可以查看程序的系统调用参数、返回值和执行时间,以定位如文件权限、动态库依赖等问题。
摘要由CSDN通过智能技术生成

目录

即看即用

简介

输出参数含义

strace参数

命令实例

strace案例

  用strace调试程序

  解决库依赖问题

  限制strace只跟踪特定的系统调用


原文:https://www.cnblogs.com/ggjucheng/archive/2012/01/08/2316692.html

即看即用

strace:跟踪到一个进程产生的系统调用,包括参数,返回值,执行消耗的时间。

语法:

strace   执行的命令   /dev/null

如:strace  /opt/ceph-osd  /dev/null

输出:

每一行都是一条系统调用,等号左边是系统调用的函数名及其参数,右边是该调用的返回值。

27207 mkdir("/tmp/.ICE-unix", 0777) = -1 EEXIST (File exists)
27207 lstat64("/tmp/.ICE-unix", {st_mode=S_IFDIR|S_ISVTX|0755, st_size=4096, ...}) = 0
27207 unlink("/tmp/.ICE-unix/dcop27207-1066844596") = -1 ENOENT (No such file or directory)
27207 bind(3, {sin_family=AF_UNIX, path="/tmp/.ICE-unix/dcop27207-1066844596"}, 38) = -1 EACCES (Permission denied) 
27207 write(2, "_KDE_IceTrans", 13) = 13
27207 write(2, "SocketCreateListener: failed to "..., 46) = 46
27207 close(3) = 0 27207 write(2, "_KDE_IceTrans", 13) = 13
27207 write(2, "SocketUNIXCreateListener: ...Soc"..., 59) = 59
27207 umask(0) = 0 27207 write(2, "_KDE_IceTrans", 13) = 13
27207 write(2, "MakeAllCOTSServerListeners: fail"..., 64) = 64
27207 write(2, "Cannot establish any listening s"..., 39) = 39

简介

strace常用来跟踪进程执行时的系统调用和所接收的信号。 在Linux世界,进程不能直接访问硬件设备,当进程需要访问硬件设备(比如读取磁盘文件,接收网络数据等等)时,必须由用户态模式切换至内核态模式,通 过系统调用访问硬件设备。strace可以跟踪到一个进程产生的系统调用,包括参数,返回值,执行消耗的时间。

输出参数含义

strace   命令   /dev/null 如:strace /opt/ceph-osd /dev/null

root@ubuntu:/usr# strace cat /dev/null 
execve("/bin/cat", ["cat", "/dev/null"], [/* 22 vars */]) = 0
brk(0)                                  = 0xab1000
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f29379a7000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
...
brk(0) = 0xab1000
brk(0xad2000) = 0xad2000
fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 0), ...}) &
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
常感谢您的指正,我的回答中有误。以下是关于strace的正确介绍和使用方法: strace是一种调试工具,可以用来跟踪进程系统调用以及接收和发送的信号。它可以用来定位程序的问题,例如执行错误的系统调用、I/O错误等等。下面介绍如何使用strace: 1. 安装strace 在大多数Linux发行版中,strace是默认安装的。如果您的系统中没有安装strace,可以使用以下命令进行安装: ``` sudo apt-get install strace ``` 2. 使用strace 使用strace常简单,只需要在终端中输入strace命令,加上需要跟踪进程ID即可。例如,假设需要跟踪进程ID为1234的进程,可以使用以下命令: ``` sudo strace -p 1234 ``` strace会输出进程执行的每个系统调用,以及调用时传递的参数和返回值。例如,以下是一个strace的输出示例: ``` open("/etc/passwd", O_RDONLY) = 3 fstat(3, {st_mode=S_IFREG|0644, st_size=2455, ...}) = 0 mmap(NULL, 2455, PROT_READ, MAP_SHARED, 3, 0) = 0x7f70a0346000 close(3) = 0 ``` 其中,每一行都是一个系统调用,以及调用时的参数和返回值。在上面的示例中,进程调用了open系统调用来打开/etc/passwd文件,然后使用fstat系统调用查询文件的状态,并使用mmap系统调用将文件映射到内存中,最后使用close系统调用关闭文件。 可以使用strace的不同选项来进行更详细的设置,例如使用“-t”选项来在输出中添加时间戳,使用“-e”选项来指定需要跟踪系统调用等等。具体可以参考strace的官方文档。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值