TraceCode工具包 "strace" 是动态构建跟踪器和绘图器
项目描述
跟踪Linux上的构建
TraceCode是一个分析跟踪的构建执行的工具,这样您可以了解哪些文件被构建到二进制文件中,并最终部署到您的分布式软件中。
此TraceCode工具包使用strace捕获构建的系统级跟踪,并可以从此跟踪(即构建图)重建构建如何转换和编译文件。
1. 跟踪构建
请参阅README-build-tracing.rst以跟踪构建
2. 系统要求和安装
- 确保已安装Python:
python -v
如果没有安装,请根据需要安装它,确保它位于您的路径中。有关详细信息,请参阅您当地的Linux发行商。
- 确保您已安装Graphviz并位于您的路径中:
dot -v
如果没有安装,请根据需要安装它,确保它位于您的路径中。有关详细信息,请参阅https://graphviz.cpp.org.cn/。
如果没有安装,您将看到错误消息,结果可能无法使用。
3. 安装TraceCode
从https://github.com/nexb/tracecode-toolkit-strace获取它并解压缩。本文件中,将此解压缩的路径称为<tracecode_dir>。
然后执行此命令以设置TraceCode
./configure --dev
最后运行内置的自检以验证您的安装
py.test -vvs tests
4. 安装strace
One debian
sudo apt-get strace
5. 分析您的构建
分析跟踪的构建是一个多阶段的过程,涉及
解析和检查初始跟踪数据,
可选地过滤解析的跟踪数据,
可选地收集构建过程中读取和写入的文件清单,
创建构建的源(输入)和目标(输出)文件列表,
分析构建图以确定源到目标关系,例如源代码文件被编译成二进制文件,
可选地创建图形表示以可视化构建图的一部分。
每个步骤都是通过在命令行中调用tracecode并使用不同的选项和参数来执行的。
使用以下命令运行跟踪分析
tracecode <options> <command> <arguments>
使用命令帮助
tracecode -h
教程
有关额外详细信息,请参阅README-build-tracing.rst。
0. 跟踪命令
使用strace这种方式
$(which strace) -ff -y -ttt -qq -a1 \ -o {NEW EMPTY tracing_dir}/{trace prefix} \ {build command}
1. 解析收集到的原始跟踪数据
创建一个新的空目录来存储解析的跟踪数据。然后使用“解析”命令进行解析
tracecode parse <RAW TRACES DIR INPUT> <PARSED TRACES DIR OUTPUT>
这将解析跟踪数据并确保它们可以被处理且是完整的
2. 收集跟踪过程中处理的文件清单
如果跟踪数据是一致的,下一步是收集读取和写入的文件清单。使用“list”命令(应称为清单)。它从一个解析的跟踪数据创建两个文件:一个只读取的文件列表和一个写入的文件列表
tracecode list <PARSED TRACES DIR INPUT> <READS OUTPUT FILE> <WRITES OUTPUT FILE>
“list”命令提取跟踪中使用的所有路径。
3. 可选但推荐:过滤解析的跟踪数据
下一步是审查这些读取和写入,并决定哪些可以被过滤掉,因为它们可能不会为构建图和数据分析提供有趣的数据。
这通常包括
/etc/*
/proc/*
如果有,构建日志文件
在/usr/*和类似路径中的某些标准事物
为此,您将构建一个要忽略的读取列表和写入列表(通常是模式或纯列表),将这些列表放入两个文件中,并使用filter命令过滤掉这些读取和写入。
注意不要过滤太多:您想要保留在/tmp中的临时文件,可能不关心某些makedepend (.po等)文件。
首次过滤时请过滤到一个新目录,这样您就不会替换原始的完整解析跟踪数据,这样您就可以轻松地优化过滤。
创建一个包含您要过滤或修剪的每个读取或写入的文件的文件,每行一个读取或写入。可以是找到的读取或写入列表中的完整路径,也可以是如/etc/*中的模式,在这种情况下,匹配/etc/*的所有内容都会被过滤掉,就像您在命令行上使用glob模式一样。每行一个路径或模式。注意,它也可以是一个单列csv。
4. 可选:猜测源和目标
您可以使用“guess”命令来猜测源和目标,但这只是一个猜测。在小型、定义明确的简单代码库上猜测效果不错,但在大型代码库上可能不太适用。
- 猜测的方法是这样的
只读文件很可能是源/开发文件
只写入读取的文件很可能是目标/部署文件
5. 组装源和目标的清单
一旦您已过滤了解析后的跟踪,您需要创建一个包含您的源(原始开发文件)的文件列表,以及另一个包含您的目标(部署文件)的文件列表。您需要分别在每个单独的文件中构建这些清单。您可以尝试使用猜测命令,但这只是基于图的盲目猜测。路径的结构应该与“list”输出的结构完全相同。源和目标文件应该在读取和写入操作中,因此您可以使用这些列表作为输入。或者,您可以使用在跟踪之前(您的源)和之后保留的find命令的输出,并将其与diff进行比较以找到候选文件。
使用这些列表再次构建新列表,以定义开发/源文件列表和部署/目标文件列表。
6. 分析源到目标的转换
然后您可以运行分析命令以获取源到目标部署分析。
7. 可选:图形化选择源到目标转换的子集
您可以选择性地创建一个图形,追踪多个源到单个目标或多个目标到单个源的转换(选择性是因为这需要很长时间运行,并且大图形难以可视化)
常见问题解答
Q:在解析原始跟踪时我遇到了这个错误
ERROR:tracecode:INCOMPLETE TRACE, 149249 orphaned trace(s) detected. First pid is: 3145728.
A:这是一个严重错误,意味着您的跟踪不一致,因为某些进程跟踪无法与初始命令启动图相关联,因此是无关的。这可能会发生如果您错误地跟踪了几个命令,并将strace输出保存在同一目录下。您需要从干净的空目录开始重新收集跟踪。
Q:在解析原始跟踪时我收到了几个警告
WARNING:tracecode:parse_line: Unable to decode descriptor for pid: 3097012, line: '1399882436.807573 dup2(5</extra/linux-2.6.32/scripts/mksysmap>, 255) = 255\n'
A:这只是一个警告,您大多数时候可以忽略它。这里文件描述符255不存在(也不能存在),因此出现警告。
许可证
Apache-2.0
第三方依赖项的多个许可证(GPL2/3、LGPL、MIT、BSD 等)。
项目详情
下载文件
下载您平台的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。
源分布
构建分布
哈希值 for tracecode_toolkit_strace-0.21.0-py3-none-any.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 5d70d86719767ef6e8b4edc33749e8b746b3ae6d790ac44fb2aa44812439a1ba |
|
MD5 | a600ad7531b12126b993f67f4bcdcf97 |
|
BLAKE2b-256 | 2051f8c1e720ae77dd9ac8f0f552c285b17f2be33b191c235d48b096d160d684 |