#dlt #trace #automotive #log #analysis #logging #file-sorting

bin+lib adlt

用于处理汽车 DLT-(诊断日志和跟踪)文件的库和工具

8 个不稳定版本 (3 个破坏性更新)

0.33.2 2023 年 4 月 19 日
0.33.1 2023 年 4 月 18 日
0.31.0 2023 年 3 月 1 日
0.30.0 2022 年 12 月 25 日
0.0.2 2021 年 8 月 31 日

#375 in 编码

每月下载量:24

CC-BY-NC-SA-4.0

675KB
14K SLoC

adlt README

License: CC BY-NC-SA 4.0 codecov Build&Test

这个 Rust 包提供了一组库和工具,帮助您处理汽车 DLT(诊断日志和跟踪,见 GENIVIAUTOSAR)文件。

注意:这是一个非常早期的版本,也是我的第一个 Rust 项目。可能存在大量错误或限制/部分实现。接口可能会频繁更改!

功能

  • 打开任意大小的 DLT 文件。

  • 生命周期检测功能,包括检测(有点启发式)具有内存挂起的 ECU 的"SUSPEND/RESUME"生命周期。

  • 考虑生命周期的时间戳排序。

  • 筛选...

  • 远程服务器支持:通过 wss 提供请求。例如,与 DLT-Logs Visual Studio Code 扩展 一起使用。

  • 内置 插件,例如

    • 非详尽消息解码(仅远程)
    • SOME/IP 负载解码(仅远程),
    • 重写消息时间戳或负载文本(仅远程),
    • 文件传输提取/检测(远程和控制台)。

使用示例

命令行工具

显示 convert 命令的帮助信息

adlt convert -h

打印 DLT 文件的 ascii 表示

adlt convert -a <dlt_file>

显示 DLT 文件的所有生命周期(ecu、时间范围、消息数量和软件版本)

adlt convert <dlt_file>
...
have 3 lifecycles:
LC#  1: ECU1 2021/06/24 08:50:58.529663 - 08:53:51 #   26523 <sw version if contained as GET_SW_VERSION response>
LC#  2: ECU1 2021/06/24 08:54:29 RESUME - 08:55:08 #  181337 <sw version>
LC#  3: DLOG 2021/06/24 08:54:44.945600 - 08:54:44 #       1

按生命周期输出/提取特定生命周期到文件,并按时间戳排序

adlt convert <dlt_file> # to see the lifecycle ids. here e.g. LC#  1: ... and LC#  2: ...
adlt convert -l 1 2 -o <new_file> --sort <dlt_file> # export LC #1 and #2 sorted into new_file

输出匹配筛选器的消息到新文件

# filter_file can be in dlt-convert format as a list of APID CTIDs. E.g. echo "API1 CTI1  API2 CTI2 " > filter_file
# or it can be in dlt-viewer dlf format (xml file with <?xml...><dltfilter><filter>... )
adlt convert -f <filter_file> -o <new_file> <dlt_file> # export all messages fitting to filter_file sorted into new_file
# lifecycle filters -l ... or sorting --sort can be applied as well!

显示生命周期和嵌入式文件传输

adlt convert --file_transfer=true --file_transfer_apid SYS --file_transfer_ctid FILE <dlt_file>

从一组 DLT 文件将所有核心转储导出到 'dumps' 目录

adlt convert --file_transfer='core*.gz' --file_transfer_path dumps --file_transfer_apid SYS --file_transfer_ctid FILE '**/*.dlt'
...
LC# 35: ECU1 2020/12/19 10:29:22.158128 - 10:29:39 #   15115 
have 6 file transfers:
LC# 12: 'context.1584997735.controller.812.txt', 60kb 
LC# 12: 'core.1584997735.controller.812.gz', 115kb , saved as: 'dumps/core.1584997735.controller.812.gz'
LC# 20: 'context.1585074417.controller.802.txt', 60kb 
LC# 20: 'core.1585074417.controller.802.gz', 115kb , saved as: 'dumps/core.1585074417.controller.802.gz'
LC# 35: 'screenshot_20741013-092935_KOMBI.png', 7kb 
LC# 35: 'screenshot_20741013-092935_HUD.png', 1kb 

已知问题

进行中...

如何安装二进制文件

您可以使用来自 adlt/releases 的预构建二进制文件,或者构建自己的二进制文件

如何构建

cargo build
cargo test
cargo build --release

从单元测试中确定代码覆盖率

在此查看CI生成的代码覆盖率结果:codecov

要安装grcov支持

cargo install grcov
rustup install nightly
rustup default stable
rustup component add llvm-tools-preview

要生成覆盖率

rm -rf ./target *.prof* 
export RUSTFLAGS="-Zinstrument-coverage"
export LLVM_PROFILE_FILE="your_name-%p-%m.profraw" 
cargo +nightly build
cargo +nightly test
grcov . --binary-path ./target/debug/ -s . -t html --branch --ignore-not-existing -o ./coverage/
cd coverage
open ./index.html

运行基准测试

基准测试使用criterion和cargo-criterion。要安装

cargo install cargo-criterion

要运行

cargo criterion
or
cargo bench

结果将在控制台打印,并且HTML报告将创建在

target/criterion/reports/index.html或target/criterion/report/index.html。

要保存基线使用

cargo bench --bench dlt_benches -- --save-baseline <name>

与保存的基线进行比较

cargo bench --bench dlt_benches -- --baseline <saved_baseline_name>

执行发布

cog bump --auto

检查提交消息

cog check -l

贡献

欢迎任何和所有的测试、代码或反馈贡献。打开问题或创建一个pull请求,使这个库更好地服务于每个人。

Donations欢迎捐赠!(联系我进行商业用途或不同许可)

GitHub ♥︎ 赞助者欢迎!

贡献者

发行说明

查看变更日志

第三方内容

此库利用了大量在MIT或MPL-2.0或Apache-2.0许可下分发的惊人的第三方组件。感谢作者们!

在Cargo.toml的依赖关系部分查看详细信息。

使用cocogitto强制执行传统提交消息。使用codecov托管代码覆盖率结果。谢谢!

依赖关系

~16–28MB
~490K SLoC