查看错误栈

得到转储文件后可以通过以下方式读取转储文件内容

Windows:

通过visual Studio打开转储文件,得到转储文件生成时的程序运行状态。需要有可执行程序oscar.exe,源代码和pdb文件fenixdb_release.pdb。

Linux:

通过google-breakpad中的md2core工具将转储文件转换为core文件,通过gdb打开core文件得到转粗文件生成时的程序运行状态。需要有带符号信息的可执行程序和源代码。

md2core 转储文件 > core文件

gdb 后台可执行程序 core文件

所有平台:

通过google-breakpad中的minidump_stackwalk工具将转储文件打印成可读的文本格式。需要有数据库可执行程序的符号文件。数据库后台发布时会同步生成符号文件,并放在特定的目录结构中。由于minidump_stackwalk只有linux版本,因此在windows下产生的dmp文件也需要放到linux上查看。

minidump_stackwalk 转储文件 符号文件目录 > dump.txt

示例:

  1. 在windows下查看调用栈信息

首先执行sql语句转储当前调用栈信息:

alter system set events (immediate trace name errorstack);

然后到指定的转储目录(默认安装目录的dump目录)下,使用Visual Studio打开转储文件并执行,就可以看到sql语句执行时的调用栈。

在linux下查看发生某个错误时的错误栈

首先执行sql语句:

alter system set events (850395213 trace name errorstack forever);

使用md2core文件将转储生成的dmp文件转换为gdb支持的core文件:

md2core 5f96543d-8fb0-999d-58b9c3b1-6bc934d1.dmp > stack.core

使用gdb查看错误栈:

gdb /opt/ShenTong/bin/oscar stack.core

使用minidump_stackwalk将dmp文件转为可读形式

首先执行sql语句:

alter system set events (850395213 trace name errorstack forever);

使用minidump_stackwalk文件将转储生成的dmp文件转换为可读文件:

minidump_stackwalk 5f96543d-8fb0-999d-58b9c3b1-6bc934d1.dmp ./symbols >
stack.txt

最后执行sql语句对错误栈进行关闭:

alter system set events (850395213 trace name errorstack off);