代码之家  ›  专栏  ›  技术社区  ›  OrenIshShalom

模式调试生成和设置CFLAGS变量的问题

  •  0
  • OrenIshShalom  · 技术社区  · 7 年前

    我正在使用以下脚本构建以下Artifex MuPDF包:

    #!/bin/bash
    #########
    # FILES #
    #########
    PACKAGE_NAME=mupdf-1.12.0-source
    PACKAGE_TAR_FILE=${PACKAGE_NAME}.tar.xz
    PACKAGE_FTP_SITE=https://mupdf.com/downloads/
    
    ####################################
    # REMOVE OLD STUFF JUST TO BE SURE #
    ####################################
    rm -rf build
    rm -rf ${PACKAGE_NAME}
    rm -rf ${PACKAGE_TAR_FILE}
    
    #####################################
    # Get source code for buggy package #
    #####################################
    wget ${PACKAGE_FTP_SITE}/${PACKAGE_TAR_FILE}
    
    ######################
    # Unpack it here ... #
    ######################
    tar xf ${PACKAGE_TAR_FILE}
    
    #################
    # Configure ... #
    #################
    cd ${PACKAGE_NAME}
    
    ###############
    # Make it !!! #
    ###############
    XCFLAGS="-g -O0" make
    

    我使用XCFLAGS而不是CFLAGS来启用调试构建, 因为它在makefile中这样说:

    不要在make调用行上指定CFLAGS或LIBS-指定 而不是XCFLAGS或XLIBS。Make忽略makefile中 设置在命令行上设置的变量。

    然而,当我启动gdb会话时,它表示目标已构建 没有 调试符号:

    $ gdb --args ./mupdf-1.12.0-source/build/release/mutool poster ~/Downloads/mutool_poster_crash
    Reading symbols from ./mupdf-1.12.0-source/build/release/mutool...(no debugging symbols found)...done.
    

    我怎样才能知道发生了什么事?谢谢

    1 回复  |  直到 7 年前
        1
  •  1
  •   Mike Kinghan Luchian Grigore    7 年前

    我使用XCFLAGS而不是CFLAGS来启用调试构建

    这不是调试构建的方式。查看makefile中的目标:

    build ?= release
    
    OUT := build/$(build)
    
    default: all
    
    ...
    ...
    
    all: libs apps
    
    clean:
        rm -rf $(OUT)
    nuke:
        rm -rf build/* generated $(NAME_GEN)
    
    release:
        $(MAKE) build=release
    debug:
        $(MAKE) build=debug
    

    默认构建是发布类型的构建,即。

    OUT := build/release
    

    这就是你所做的:

    ./mupdf-1.12.0-source/build/release/mutool
                          ^^^^^^^^^^^^^      
    

    发布版本将剥离可执行文件:

    mupdf-1.12.0-source$ XCFLAGS="-g -O0" make
    ...
    mupdf-1.12.0-source$ file build/release/mutool 
    build/release/mutool: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), \
    dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, \
    BuildID[sha1]=a77cfe62290635ba12ae8327e24ee545c4dc1ded, \
    stripped
    ^^^^^^^^
    

    因此,使用 -g -O0 。已删除调试信息。

    进行如下调试生成:

    mupdf-1.12.0-source$ make debug
    

    不会剥离可执行文件:

    mupdf-1.12.0-source$ file build/debug/mutool 
    build/debug/mutool: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), \
    dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, \
    BuildID[sha1]=c43e5aceb02812e1f77d2f00b7f75e4629128aac, \
    with debug_info, not stripped
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    

    当然,您还可以添加任何额外的 XCFLAGS XLIBS 您需要的选项。