美文网首页
gdb使用symbol文件调试程序

gdb使用symbol文件调试程序

作者: David栗子 | 来源:发表于2017-03-07 15:17 被阅读0次

    今天发现项目里的Makefile在debug和release版本之间有两行不一样的地方:

    @objcopy --only-keep-debug bin/Release/Server bin/Release/Server.symbol
    @objcopy --strip-debug bin/Release/Server
    

    在这两行之前都是调用子目录里的Makefile来生成Server二进制文件,这两行我不知道是什么意思,于是man了一下objcopy,发现手册里是这样解释的:

    objcopy - copy and translate object files.

    --strip-debug

    Do not copy debugging symbols or sections from the source file.

    不从源文件中拷贝调试符号或段。

    --only-keep-debug

    Strip a file, removing contents of any sections that would not be stripped by --strip-debug and leaving the debugging sections intact.

    这个正好与--strip-debug相反,是从文件中抽离--strip-debug所剩下的内容,也就是留下完整的调试信息。

    这样处理之后,就将原来的Server文件一分为二,产生了一个没有调试信息的文件Server和一个只有调试信息的Server.symbol,Server文件明显变小了。

    那么symbol文件如何使用呢?假如我们运行这个Server程序时因为某种原因宕掉了,需要用gdb来调试。因为Server本身不包含任何debug信息,这时候就需要加载symbol文件。

    可以在gdb启动时制定symbol文件:

    $ gdb -s Server.symbol -e Server -c core

    也可以在gdb运行过程中加载:

    $gdb Server core
    #(这里中间略去gdb启动的信息)
    (gdb) symbol-file Server.symbol
    

    这样就可以用symbol文件来进行调试了。

    相关文章

      网友评论

          本文标题:gdb使用symbol文件调试程序

          本文链接:https://www.haomeiwen.com/subject/whpmgttx.html