zoukankan      html  css  js  c++  java
  • (转载)在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文件来找到相应的函数。
  • 相关阅读:
    c++中的 三/五原则
    3. 无重复字符的最长子串
    c++中的单例模式
    bfs 以及 dfs 常用解题思路
    经济学的三个问题
    gtihub 上一些值得学习的项目
    994. 腐烂的橘子
    96. 不同的二叉搜索树
    some idea
    Libco协程库
  • 原文地址:https://www.cnblogs.com/Robotke1/p/3073927.html
Copyright © 2011-2022 走看看