5个版本 (稳定)
使用旧的Rust 2015
1.1.0 | 2019年5月1日 |
---|---|
0.8.0 | 2017年4月12日 |
0.7.0 |
|
0.6.0 |
|
在调试类别中排名第500
每月下载量29次
12KB
76 行
releasetag
代码包'releasetag'提供了从崩溃文件中识别发布标签的工具。
Releasetags放置在main()函数的上下文中或任何其他线程的堆栈上。如果应用程序崩溃,则可以从核心转储文件中提取这些标签。
Releasetags可以由一个或多个字节字符串、字节数组或文件包含组成。这些字符串不能包含任何空白字符,如换行符或行终止符。
用例
假设您的软件的多个发布/开发版本已发送给客户。现在客户提交了多个带有核心转储的崩溃报告,但客户提供的关于相关发布的信息不可靠,您需要猜测软件版本。
现在,从每个核心文件中提取releasetag,可以确定相应的软件版本,并从存档中选择正确的调试符号以进一步调查堆栈跟踪。
示例Cargo.toml
...
[dependencies]
releasetag = "^1.1"
示例:文件test/src/main.rs
#[macro_use(releasetag)]
extern crate releasetag;
fn main() {
releasetag!(b"BUILD_TAG=pre");
releasetag!(b"BUILD_TAG=", b"MAIN_2016-wk16-05-AAAA-BBBB-CCCC-DDDD-EEEE-FFFF-GGGG-HHHH-IIII-JJJJ-KKKK");
// Including data from one or multiple files or compile time env params.
// Note: the content mustn't contain any newline or linebreak as those would interfer with zero terminated strings!!
let mut version: [u8; 5] = [0; 5];
version.copy_from_slice(env!("CARGO_PKG_VERSION").as_bytes());
releasetag!(b"BUILD_VERSION=", &version);
releasetag!(b"BUILD_TAG=", &version, b"/", include_bytes!("../../AUTHOR"));
// or as byte array
releasetag!(b"BUILD_HOST=", &[0x30u8, 0x31u8, 0x33u8]);
// your application logic here
}
如果应用程序崩溃,其状态将转储到名为'core'的核心文件中,例如可以使用以下系统命令'strings'从核心文件中提取标签
cat core | strings | grep BUILD_
Releasetags可以由一个或多个字节字符串、字节数组或文件包含组成。这些字符串不能包含任何空白字符,如换行符或行终止符。不支持常规Rust字符串,因为它们可能包含零字符。
releasetag是编译时特性,在运行时没有任何处理。
每个releasetag的开销取决于底层架构和默认整数大小。对于32位架构,开销将是5个字节,对于64位架构,开销将是9个字节,这是由于前导和尾随零填充造成的。
例如,在32位架构上,50个字符的releasetag!将占用55个字节的内存堆栈。
演示者
执行以下脚本以验证releasetag功能是否正常工作
./test/run_test.sh
成功时,输出应显示
aiting until being aborted
...../run_test.sh: line 14: 25494 Aborted (core dumped) ./target/release/test-tag
BUILD_HOST=013
BUILD_VERSION=1.1.0
BUILD_TAG=pre
BUILD_TAG=1.1.0/frehberg@gmail.com
BUILD_TAG=MAIN_2016-wk16-05-AAAA-BBBB-CCCC-DDDD-EEEE-FFFF-GGGG-HHHH-IIII-JJJJ-KKKK
Success: releasetags found in file 'core'
演示说明
脚本 test/run_test.sh 正在用 'release' 标志编译应用程序 'test-tag'。此测试的目的是验证 release 标签元素在编译过程中是否能够通过 'release' 优化器。脚本 ./test/run_test.sh 正在评估 release 标签功能的正确性。
应用程序 test-tag 包含多个 release 标签 BUILD_HOST=.. 和 BUILD_TAG=..
几秒钟后,脚本继续向进程发送信号 6(ABORT),导致应用程序因信号 6 而产生 core-dump。core 文件的位置将是 'test/core'。
将生成的 core 文件扫描以查找 'BUILD_' 字符串。
成功时,脚本将以返回值 0 退出,否则功能损坏,返回值将为 1。