崩溃转储(rust)

# 崩溃转储


## google breakpad


### 使用


breakpad不需要安装,使用方式为侵入式的,需要引入额外代码,可以作为外部库引入,也可以直接使用源码。breakpad 对进程(操作系统进程)有效,一次引入所有模块均有效。breakpad使用时需要提供库(或可执行文件)对应的 text-format symbol files(windows下为 .pdb文件,linux下为.sym文件),版本需要严格一致。breakpad 可用于类c语言(c/c++/rust等)的程序或跨语言的调用的程序。


windows平台[使用](http://www.cnblogs.com/lancidie/p/3145504.html) breakpad。windows平台可以使用vs和windebug等工具分析。
vs dump[分析](http://blog.csdn.net/chenyujing1234/article/details/9357033)比较简单,将pdb和dump文件置于同一目录,直接打开、执行,跟踪堆栈信息。windebug就是更专业的工具了,可以做一些复制的问题排查(比如多线程死锁等),可以参考网上的一些文档。windows平台下需要同时提供依赖库的pdb文件。


linux平台[使用](http://blog.csdn.net/wpc320/article/details/8291296) breakpad。分析过程中需要使用到breakpad的一些工具。linux平台下不需要提供依赖库的sym文件。centos 5.8 下验证可用。


版本:支持rust的版本,[git路径](ttps://github.com/cmr/google-breakpad.git)。


## thread::catch_panic


可以捕获线程内部闭包崩溃,至于崩溃堆栈没有进一步研究。


## backtrace


两种做法: 在rust代码里面添加backtrace; 设置环境变量RUST_BACKTRACE=1,编译和执行的时候在前面加上backtrace。backtrace对主动抛出的panic起作用,对其他崩溃问题不起作用。


## coredump


### linux 下coredump的生成设置


[core dump文件方法及设置](http://www.cppblog.com/kongque/archive/2011/03/07/141262.aspx),使用使用参数cargo rustc -- -g -O编译rust源文件,崩溃的时候会产生core* 文件,用“gdb 程序名 core文件”(程序名为对应可执行文件或库文件) 打开core文件可以定位到rust的崩溃位置(具体到某一行),也可看到崩溃时候的堆栈信息。如果需要特定进程生成coredump文件,“ulimit -c size” “ulimit size”(size为具体的值)这两句加到当前会话;如果需要整个系统有效[参考](http://blog.csdn.net/newnewman80/article/details/8173770)。


### windows下coredump的生成设置 


详见[参考文档1](http://blog.sina.com.cn/s/blog_9451e44e01015x82.html),[参考文档2](https://msdn.microsoft.com/en-us/library/windows/desktop/bb787181(v=vs.85).aspx).

你可能感兴趣的:(rust)