崩溃报告
系统的客户端和服务端组件内核根据信号类型来决定是否产生core文件
-g
选型静态库
将会与使用者的程序编译在一块signal
样例:
MODULE windows x86 3AA3B2229C144C24AEBEF3D971F32D711 GMTSJWorker.pdb
FILE 18430 d:\winmain.public.x86fre\sdk\inc\rpcdce.h
FUNC b7990 49 0 `dynamic initializer for 'std::_Error_objects::_Generic_object''
b7990 49 611 282
FUNC c2a70 327 0 boost::algorithm::detail::process_segment_helper<0>::operator() >,std::basic_string,std::allocator >,std::_String_iterator > > >(std::deque > &,std::basic_string,std::allocator > &,std::_String_iterator > >,std::_String_iterator > >,std::_String_iterator > >)
c2a70 53 63 6337
c2ac3 62 71 6337
STACK WIN 4 207410 f 3 0 0 0 0 0 1 $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + =
关于符号信息,linux环境:编译非release版本的程序时(如,gcc 开了-g选项),编译器通常会将带有符号相关的信息以某种格式(DWARF,STABS)组织起来,存放在可执行文件的某个段位里。windows环境:脱离可执行文件,放在单独的pdb中
根据当前帧的eip(x86)来调用 CodeModules::GetModuleForAddress()返回当前frame所属的模块信息
前面找到模块后,找到只是二进制相关的信息。要找到这个模块相应的名字及模块里其它函数,变量的名字等,还需要用到之前symbole file.
根据某个地址,查找出对应的符号名字,如,输入一个函数地址,返回函数的名字。