(转载)在linux下使用core dump和map文件调试
(转载)http://www.cnblogs.com/sunyubo/archive/2010/08/25/2282132.html 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 ld命令:
gcc命令:
3). 配合使用
如果没有-g选项,在栈调用信息中,不能打印出具体到某一行的源码,但是,根据栈调用
时的地址,可以根据map文件来找到相应的函数。