#log-file #editor #source #source-file #replay #applications

app retread

Retread是一个调试适配器,允许你在IDE或编辑器中回放日志文件

2个版本

0.1.1 2023年8月6日
0.1.0 2023年8月6日

#592 in 调试

GPL-2.0 许可协议

140KB
1K SLoC

Retread

Retread是一个日志文件回放和调试工具,旨在在只有日志文件可用时简化调试过程。它为在重现缺陷或无法附加调试器的情况下提供了高效解决方案。通过提供逐条查看日志消息并关联对应源代码的能力,Retread使开发者能够深入了解应用程序的行为。

工作原理

Retread充当调试适配器,允许你的编辑器连接并执行调试命令,如设置源文件或日志文件中的断点以及逐条查看日志消息(正向和反向),然后Retread将告知编辑器或与每条日志消息对应的源代码行。由于我们使用标准化的调试适配器协议,Retread可以在大多数编辑器中使用,并提供熟悉的调试界面。

将日志消息映射到源文件不是一门精确的科学。你可以为Retread提供一个正则表达式来解析日志文件并找到其中可能隐藏的任何有用的元数据,例如文件名、行号或函数名。这将既加快将日志消息与源文件匹配的过程,又使其更加准确。

设置

Retread使用标准化的调试适配器协议,可以与任何支持DAP的IDE一起使用。我们提供了一个包含Retread二进制的VSCode扩展,以帮助快速启动。

对于其他系统,请注意我们目前仅在初始化调试适配器时支持launch,而不是attach

发送launch命令时,应提供以下配置选项。这些相同的配置选项应在VSCode中的launch.json配置中设置。

配置选项

以下配置选项受到支持。

名称 类型 描述
log_file 字符串 要模拟的日志文件的路径。2
log_pattern 字符串 正则表达式,用于告知Retread如何分析日志文件的每一行。正则表达式使用命名捕获组来分析日志。
include 字符串数组 搜索所有源文件时使用的glob模式数组。
exclude 字符串数组 排除搜索的源文件时使用的glob模式数组。

支持以下正则表达式捕获组。

名称 描述
message 必需。包含没有元数据的记录消息。
file 可选。包含记录消息的文件的路径或名称。
line 可选。包含记录消息的行号。
func 可选。包含记录消息的函数的名称。

示例配置

{
    "log_file": "~/my_log.txt",
    "log_pattern": "\\[(?P<file>\\w+) : (?P<line>\\d+)\\] (?P<message>.*)$",
    "include": ["./linux/**/*.c"],
    "exclude": []
}

此配置将在linux源树中搜索所有C文件,并使用以下日志格式进行匹配

[linux/lib/clz_ctz.c:27] Log message example
[linux/mm/memcontrol.c:5448] Hello world 
[linux/crypto/hmac.c:84] Another log message
...

依赖项

~9–14MB
~256K SLoC