9个版本
0.1.8 | 2024年3月9日 |
---|---|
0.1.7 | 2024年3月4日 |
0.1.5 | 2024年2月13日 |
0.1.2 | 2024年1月31日 |
#95 in 操作系统
每月下载量441次
24KB
494 行
pai-strace
使用pai创建的类似strace的工具
安装
cargo install --force pai-strace
检查新版本是否可用
pai-strace --check-update
在未安装cargo
的目标上使用,请参阅发布。
开发状态
处于开发中,可能存在一些错误。
编译
cargo-make用于控制构建过程。 cross用于支持交叉编译。为了简化构建过程,即使在为主机目标编译时也使用cross
。
构建目标的命令是
cargo make [build|release] [target(s)]
输出将放在output/<target>/<debug|release>/pai-strace
如果不指定任何目标,它将位于output/<debug|release>/pai-strace
一些其他有用的make目标
cargomake clippy
- 应在每次提交前运行
cargomake publish
- 在crates.io上发布新版本
cargomake release[target1 target2 targetN]
- 为给定目标构建发布版本
cargomake releasecheck
- 运行
publish
和release
目标的依赖项,而不发布或发布任何内容。 - 不会在未提交的更改上运行,因此不需要在提交前运行此命令
- 运行
cargomake update
- 更新
Cargo.lock
中的所有依赖项 - 这是
releasecheck
的一部分
- 更新
如何使用
有关更多命令,请参阅--help
,但以下是一些示例,每个示例都简单地启动了true
命令。
最基本命令是只将所有系统调用打印到stdout。
pai-strace true
以下是一个示例,将原始格式和json格式写入文件,分别是calls.txt
和calls.json
。
pai-strace --format json --format raw --output calls true
在以下先前的示例中,您可能已经看到类似以下内容
[594079]: openat(fd=0xffffff9c, file=0x7ff1d2a7121b, flags=0x80000, mode=0x0) = 0x3
这并没有提供太多关于文件如何打开的信息。为了提供更多上下文,我们可以提供--enrich
参数。
pai-strace --enrich basic true
现在行变成了。
[594137]: openat(fd=fd(AT_FDCWD), file=ptr(7f363802421b), flags=flags(O_CLOEXEC), mode=flags()) = fd(3)
现在我们可以看到文件描述符是常量,以及传递的标志名称。
然而我们仍然不知道文件名,为了读取指针,我们可以传递--enrich full
参数
pai-strace --enrich full true
输出现在变成了
[594176]: openat(fd=fd(AT_FDCWD), file="/etc/ld.so.cache", flags=flags(O_CLOEXEC), mode=flags()) = fd(3)
唯一的区别是文件名已经被解析。原始格式raw
省略了一些信息,上面命令的完整信息在json
格式中包括以下内容。它包括用于推导标志、字符串等的实际值,还包括参数的方向。在这种情况下,所有参数都是输入。
{
"tid": 594246,
"sysno": 257,
"name": "openat",
"args": [
{
"name": "fd",
"value": {
"raw_value": 4294967196,
"parsed": {
"FdConst": {
"value": -100,
"name": "AT_FDCWD"
}
}
},
"dir": "In"
},
{
"name": "file",
"value": {
"raw_value": 139771623875099,
"parsed": {
"String": {
"string": "/etc/ld.so.cache"
}
}
},
"dir": "In"
},
{
"name": "flags",
"value": {
"raw_value": 524288,
"parsed": {
"Flag": {
"set": [
"O_CLOEXEC"
]
}
}
},
"dir": "In"
},
{
"name": "mode",
"value": {
"raw_value": 0,
"parsed": {
"Flag": {
"set": []
}
}
},
"dir": "In"
}],
"output": {
"raw_value": 3,
"parsed": {
"Fd": {
"fd": 3
}
}
}
}
依赖
~15–30MB
~506K SLoC