这是 latrace 命令,可以使用我们的多个免费在线工作站之一在 OnWorks 免费托管服务提供商中运行,例如 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器
程序:
您的姓名
latrace - LD_AUDIT 2.4+ libc 前端
概要
latrace [-snltfvhiBdISbcCyYLpoaNADVTFERq] 命令 [arg ... ]
商品描述
latrace 跟踪器能够运行命令并使用
LD_AUDIT libc 功能,从 libc 2.4 版开始可用。 它也能够
测量和显示动态呼叫的各种统计信息。 请参阅名为
“讨论”了解更多详情。
如果提供了带有函数声明的头文件,latrace 将显示
函数的参数。 头文件文件的语法类似于C语言,具有
几个例外 请参阅名为“HEADERS”的部分了解更多详细信息。
默认情况下,latrace 完全在被跟踪程序内部运行。 然而另一个“管
模式”可用于将主要工作移至跟踪器 - latrace 二进制文件。请参阅
有关更多详细信息,请参阅“PIPE 模式”部分。
latrace 的用法类似于 痕迹(1)和 跟踪(1)。
配置
-l, --libs lib1[,lib2,...]
审计来自和向 lib1、lib2 ...
-t, --libs-到 lib1[,lib2,...]
审计到 lib1, lib2 ...
-f, --libs-来自 lib1[,lib2,...]
来自 lib1、lib2 的审计...
-s, --sym sym1[,sym2,...]
审计符号 sym1, sym2 ...
-n, --sym-省略 sym1[,sym2,...]
省略符号 sym1, sym2 ...
-L, --lib-subst s1[,s2,...]
objsearch LD_AUDIT 接口(参见“OBJSEARCH”部分)
-c,--计数
显示符号的统计计数 - 暗示管道模式(请参阅名为“PIPE
模式”)显示无符号输出
-C, --sort-counts 统计
隐含 -c,加上按 stat 使用以下值对统计信息进行排序:
time,per,call,ucall,lib,sym(默认为 call)
-p,--管道
使用管道到 latrace 进程发送审计数据(参见“PIPE 模式”一节)
-N,--conf
配置文件(参见“CONFIG”一节)
-A,--启用参数
启用参数输出(来自 /etc/latrace.conf 的定义)
-D, --细节参数
更详细地显示结构参数
-a, --args 文件
指定参数定义文件,隐含 -A(没有默认定义文件
课程)
-y, --framesize 数字
用于在 pltexit 之前存储堆栈的 framesize(默认 100)
-Y, --无帧大小检查
禁用帧大小检查
-F, --无跟随分叉
不要跟随叉子调用(孩子)。 这只是抑制了新的latrace 输出
孩子们。 的性质 LD_审计 功能阻止完全禁用它。
-E, --no-follow-exec
不要跟随 exec 调用
-S,--时间戳
显示每个符号的时间戳
-b, --flow-低于 sym1[,sym2,...]
sym1, sym2 的显示流程...
-I,--无缩进符号
不要根据它们的堆栈深度缩进符号
-i, --indent-sym 缩进大小
indent_size 中的缩进尺寸规范
-B, --大括号
始终显示 { } 对于符号体周围
-d, --demangle
输出上的 C++ demangle 符号
-T, --隐藏tid
不显示线程ID
-o, --输出文件
将输出存储到文件
-R,--ctl-配置
受控配置功能
-q, --禁用
在禁用审计的情况下运行
-v,--详细
详细输出
-V,--version
显示版本
-h,--帮助
显示帮助
示例
· 最简单的运行latrace的方式是这样的:
长尾猫
· 要查看默认配置文件指定的参数值,请运行:
latrace - 一只猫
· 同上,但使用管道模式打印所有结束符号:
latrace -Ap 猫
· 要查看指定配置文件指定的参数值,请运行:
latrace -a latrace.conf 猫
· 要仅获取指定符号的输出(例如读取和写入),请运行:
latrace -A -s 读,写猫
· 要获取指定符号(例如 sysconf)下的流量,请运行:
latrace -b sysconf 杀死
· 要仅获取指定库(例如 libproc)的输出,请运行:
latrace -Al libproc w
· 要运行符号统计信息:
拉特拉斯-c ls
· 获取按运行时间排序的交易品种统计信息:
latrace -C 时间 ls
· 要将输出存储到文本文件,请运行:
latrace -o 输出.latrace ls
· 要将 libkrava1.so 依赖项更改为 libkrava2.so,请运行以下命令之一:
latrace -L krava1%krava2 前
latrace -L krava1~libkrava2.so 前
latrace -L libkrava1.so=libkrava2.so 前
讨论
名字 查看
对于选项 "-l -t -f -s -n -b" 这些因素包括原料奶的可用性以及达到必要粉末质量水平所需的工艺。 * 符号可用于切换到子串
搜索。 如果未指定,则对名称进行精确搜索。
例子:
-s "*krava" 检查带有 "krava" 子字符串的符号。
-s "krava" 只检查 "krava" 符号
LD_审计
这只是对 LD_审计 特征。 想要查询更多的信息
期待 rtld-审计(7) 由 Petr Baudis 完成或研究 glibc/latrace 源代码。 非常
简要说明如下。
libc 动态链接器审计功能允许跟踪/审计程序的符号/库。
该功能由 LD_审计 环境变量。 这个变量必须包含
审计共享库的路径。 这个审计库需要遵循特定的接口。
然后接口函数将被动态链接器适当地调用。
审计库需要导出以下符号(“la_PLTENTER”和“la_PLTEXIT”
名称取决于体系结构)。
“la_activity”
“la_objsearch”
“la_objopen”
“la_preinit”
“la_symbind32”
“la_symbind64”
“la_PLTENTER”
“la_PLTEXIT”
“la_objclose”
至于 latrace 包,审计共享库称为 libltaudit.so。
对象搜索
对象搜索 LD_审计 接口提供更改跟踪程序共享对象的方法
名称/地点。 -L 选项参数应具有以下形式:
-L s1[,s2,...] 其中 sN 是 SRC [=%~] DST
这个 SRC 是源模式/名称和 DST 是目标名称/模式。
= 将 src 与库进行比较
姓名。 如果匹配,请更换
带 dst 的库名。
库名称 - /lib/krava1.so
src - /lib/krava1.so
目的地 - /lib/krava2.so
最终库名称 - /lib/krava2.so
% 在库名中寻找 src。 如果
找到,将 src 替换为 dst 部分。
库名称 - /lib/krava1.so
src-krava1
dst-krava2
最终库名称 - /lib/krava2.so
~ 在库名中寻找 src。 如果
找到,用dst替换库名。
库名称 - /lib/krava1.so
src-krava1
目的地 - /lib/krava2.so
最终库名称 - /lib/krava2.so
U型槽 模式
这个 拉特拉斯 可以在两种模式下工作。 第一个 本地人 是否直接在
跟踪的程序进程。 另一个, 管 mode 使用 IPC fifo 机制发送
从被追踪进程到latrace进程的数据。 latrace 过程是
负责输出。 使用管道模式你会失去被追踪的程序标准
带有打印符号的输出上下文。
通过使用 管 模式,latrace 不依赖于跟踪程序
标准输出描述符的使用/操作。 符号统计也很重要
-C, -C 选项 使用 管 将符号信息传输到latrace二进制的模式,以及
latrace 二进制文件在最后进行计数。
配置
latrace 提供了通过以下方式启用/禁用某些选项的可能性
配置文件。 一些选项链接到命令行参数
他们不是。 latrace 启动时读取全局配置文件。 这个文件是
通常被放置在这里:
/etc/latrace.d/latrace.conf
从这个文件中读取默认值,用户可以通过命令行重载其中的任何一个
选项或通过补充另一个配置文件 -N, --conf 选项。
配置文件语法大致为:
包括
选项 {
选项 1 = 值
选项 2 = 是|否
...
选项 = 价值
}
# 评论
配置 文件 选项
标题 = 文件
-a,--args
INDENT_SYM = 值
-i,--缩进符号
管道 = 布尔
-p,--管道
时间戳 = 布尔值
-S,--时间戳
框架尺寸 = 价值
-y, --帧大小
FRAMESIZE_CHECK = 布尔值
-Y, --无帧大小检查
HIDE_TID = 布尔值
-T, --隐藏tid
FOLLOW_FORK = 布尔
-F, --无跟随分叉
FOLLOW_EXEC = 布尔
-E, --no-follow-exec
去芒格 = 布尔
-d, --demangle
大括号 = 布尔
-B, --大括号
ENABLE_ARGS = 布尔值
-A,--启用参数
DETAIL_ARGS = 布尔
-D, --细节参数
OUTPUT_TTY = 文件
· 将 tracee 终端输出存储到文件中
LIBS = LIB1[,LIB2,...]
-l,--库
LIBS_TO = LIB1[,LIB2,...]
-t,--libs-to
LIBS_FROM = LIB1[,LIB2,...]
-f,--libs-来自
SYM = SYM1[,SYM2,...]
-s, --符号
SYM_OMIT = SYM1[,SYM2,...]
-n, --sym-省略
SYM_BELOW = SYM1[,SYM2,...]
-b,--下面的流程
SYM_NOEXIT = SYM1[,SYM2,...]
· 不运行退出回调的符号(plt_exit)
ARGS_STRING_POINTER_LENGTH = BOOL
· 函数参数——显示字符串长度和指针值
标题
latrace 头文件允许用户将符号定义为经典的 C 函数
论据。 参数名称将与值一起显示为 latrace 输出。
定义的参数越多,性能和内存损失就越大
预期。
该包提供了几个预定义的头文件,用于最常用的
职能。 使用的 glibc 头文件列表如下(该列表主要遵循 ltrace
头文件列表,作者愿意根据需要更新)
ctype.h dirent.h dlfcn.h fcntl.h getopt.h inet.h ioctl.h
libintl.h libio.h locale.h Misc.h mman.h ncurses.h netdb.h
pthread.h pwd.h resource.h 信号.h socket.h stat.h stdio.h
stdlib.h string.h syslog.h term.h termios.h time.h typedefs.h
unistd.h utmp.h 等待.h
latrace 头文件通常存放在目录下:
/etc/latrace.d/headers/
用户可以使用命令行选项或配置文件指定单个头文件。 这个
然后文件可以包含其他需要的头文件。 如前所述,latrace 配置文件
语法略微遵循 C 语言语法。 以下部分描述了latrace配置
文件语言。
· 一些 POD 类型 (纯旧数据),在 latrace 中硬编码。 这些参数的大小
由 sizeof 宏决定。 名单如下。
无效
字符 u_char
短 u_short
int u_int
长 u_long
llong u_llong #(长长)
浮动双倍
· 类型定义 关键字允许根据已经存在的类型(POD
或类型定义)。 即使在类型中有多个指针层的方法
定义(*),只取一个。
typedef base_type 新类型;
typedef 基类型 * 新类型;
typedef 基类型 ** 新类型;
· 留言 遵循 C 风格的 /\* \*/ 逻辑。
/\* 注释 \*/
· 包括 关键字允许包含另一个配置文件。
#include "文件名"
· 结构 关键字允许定义结构。 语法遵循以下语法
规则。
开始::结构名称{ STRUCT_DEF };
STRUCT_DEF:: DEF | 空的
DEF:: 名称 名称 |
姓名 '*' 姓名 |
结构名称名称 |
结构名称“*”名称
名称:: [-0-9a-zA-Z_]+
· function 定义遵循以下语法(DEF 和 NAME 与 for
结构定义)。
开始:: DEF '(' ARGS ')' ';'
ARGS:: ARGS ',' DEF | 防御 | 空的
· 枚举 定义遵循以下语法(名称与结构定义相同)。
开始:: ENUM NAME '{' ENUM_DEF '}' ';'
ENUM_DEF:: ENUM_DEF ',' ENUM_ELEM | ENUM_ELEM
ENUM_ELEM:: NAME '=' NAME | 姓名
· 一个简单的latrace 配置文件的例子。
- -[ 剪这里 ] - - - - - - - - - - - - - - -
枚举克拉瓦{
克拉瓦1 = 1,
克拉瓦2,
克拉瓦3 = 100
};
#include "krava.conf"
typedef u_int pid_t;
结构 ex_st {
pid_t p;
诠释cnt;
字符 *名称;
};
int f1(pid_t p, struct ex_st *k);
int f2(char* 名称, struct ex_st k, int k = krava);
结构 ex_st* f3(pid_t *p, 结构 ex_st k);
- -[ 剪这里 ] - - - - - - - - - - - - - - -
· 目前还不支持数组,所以无法定义一些结构。 对于这样一个
结构使用 void* 类型,其中结构参数通过指针传递。 如果它
按值传递,到目前为止没有解决方法(除了填充结构
带有 POD 类型的 body 直到结构的实际长度:)。
· 不支持变量参数列表 (va_list/...)。 函数定义
需要在第一个变量参数列表参数之前停止。
PORTS
latrace 应该适用于任何支持 LD_AUDIT 的 glibc 系统。 然而争论
细节是特定于架构的,需要 latrace 内部的特殊支持。
作者愿意将latrace移植到任何架构上,只要他能访问
相应的系统。 目前功能端口有:
x86 ok
x86_64 ok
臂 ok
使用 onworks.net 服务在线使用 latrace
