在linux下使用core dump和map文件调试

in code with 0 comment
1.概念
1). 什么是core dump
core dump即是内存dump(现在通常是写在一个叫core的file 里面),core也许来自远古时候,那时候人们使用线圈制作内存,而线圈就叫做core。
2). 什么是map文件
MAP 文件是程序的全局符号、源文件和代码行号信息的唯一的文本表示方法,是整个程序工程信息的静态文本,通常由linker生成。
注:map文件在各种编译器中都可以使用,不限于gcc.


2.使用
1). core dump
如果用的是bash的话, 在/etc/profile里加上(或者修改)一条: 
ulimit -c 0
则禁止core dump.使用core dump -c 尺寸  限制core dump的文件大小。

gcc -g xxxxx.c -o xxxx
-g是必须的,否则找不到符号,只能显示栈调用信息。(-g则可以显示到哪一行出错)
gdb execute-file core-file
where
bt
print ...
detail see gdb.

2). map文件的生成
在linker阶段生成,是程序链接的内存映像,表示了某个符号(函数和全局变量等)的地址。
ld -Map map-file
or
gcc -Wl,-Map,map-file


3). 配合使用
如果没有-g选项,在栈调用信息中,不能打印出具体到某一行的源码,但是,根据栈调用
时的地址,可以根据map文件来找到相应的函数。
Comments are closed.