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

本文介绍了如何使用coredump和map文件来帮助定位Linux程序中的错误。通过设置coredump文件大小并结合使用gdb,可以查看程序崩溃时的调用栈。同时,借助map文件提供的符号信息,能够进一步定位到具体的源代码位置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

core dump和map文件是linux下调试程序的利器。
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文件来找到相应的函数。
MAP文件编译器生成的一种用于调试文件,它包含了程序的符号表地址映射信息。根据引用\[1\],MAP文件的地址通常与程序的运行地址不同,因为一个是静态编译地址,一个是动态运行地址。但是在某些情况下,这两个地址可能是相同的。无论地址是否相同,我们可以通过加载地址偏移来定位到MAP文件的地址。 根据引用\[2\],与地址400a59最接近的指令是push %rbp,对于x86平台来说,rbp寄存器的地址是400a19。这个地址对应的函数是free_glb_resource。所以,如果你遇到了fail MAP文件的问题,可能是在free_glb_resource函数中发生了崩溃。 另外,根据引用\[3\],如果你想修改vue项目的配置文件vue.config.js,你可以根据需要进行相应的配置,比如设置outputDir、assetsDir、indexPath等。其中,设置productionSourceMap为false可以在发布时去掉sourceMap,以避免泄露源代码。 希望以上信息对你有帮助。如果还有其他问题,请随时提问。 #### 引用[.reference_title] - *1* *2* [Linux程序coredump地址显示问号的调试方法 - 基于map文件](https://blog.csdn.net/wind0419/article/details/124336724)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [nodejs(13):使用 ant-design-pro-vue 修改配置文件打包 ,去掉sourceMap,保证代码安全](https://blog.csdn.net/freewebsys/article/details/88703898)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值