猿问

如何在构建目标之外生成gcc调试符号?

如何在构建目标之外生成gcc调试符号?

我知道我可以使用-g选项生成调试符号。但是,符号将嵌入目标文件中。gcc可以在结果可执行文件/库之外生成调试符号吗?像Windows VC ++编译器的.pdb文件一样。



沧海一幻觉
浏览 664回答 3
3回答

慕沐林林

您需要使用objcopy来分隔调试信息:objcopy&nbsp;--only-keep-debug&nbsp;"${tostripfile}"&nbsp;"${debugdir}/${debugfile}"strip&nbsp;--strip-debug&nbsp;--strip-unneeded&nbsp;"${tostripfile}"objcopy&nbsp;--add-gnu-debuglink="${debugdir}/${debugfile}"&nbsp;"${tostripfile}"我使用下面的bash脚本将调试信息分离为.debug目录中带有.debug扩展名的文件。这样我可以在一个tar文件和另一个tar文件中的.debug目录中tar和库和可执行文件。如果我想稍后添加调试信息,我只需提取调试tar文件,瞧我有符号调试信息。这是bash脚本:#!/bin/bashscriptdir=`dirname&nbsp;${0}`scriptdir=`(cd&nbsp;${scriptdir};&nbsp;pwd)`scriptname=`basename&nbsp;${0}`set&nbsp;-e function&nbsp;errorexit(){ &nbsp;&nbsp;errorcode=${1} &nbsp;&nbsp;shift &nbsp;&nbsp;echo&nbsp;$@ &nbsp;&nbsp;exit&nbsp;${errorcode}}function&nbsp;usage(){ &nbsp;&nbsp;echo&nbsp;"USAGE&nbsp;${scriptname}&nbsp;<tostrip>"}tostripdir=`dirname&nbsp;"$1"`tostripfile=`basename&nbsp;"$1"`if&nbsp;[&nbsp;-z&nbsp;${tostripfile}&nbsp;]&nbsp;;&nbsp;then &nbsp;&nbsp;usage &nbsp;&nbsp;errorexit&nbsp;0&nbsp;"tostrip&nbsp;must&nbsp;be&nbsp;specified"fi cd&nbsp;"${tostripdir}"debugdir=.debug debugfile="${tostripfile}.debug"if&nbsp;[&nbsp;!&nbsp;-d&nbsp;"${debugdir}"&nbsp;]&nbsp;;&nbsp;then &nbsp;&nbsp;echo&nbsp;"creating&nbsp;dir&nbsp;${tostripdir}/${debugdir}" &nbsp;&nbsp;mkdir&nbsp;-p&nbsp;"${debugdir}"fi echo&nbsp;"stripping&nbsp;${tostripfile},&nbsp;putting&nbsp;debug&nbsp;info&nbsp;into&nbsp;${debugfile}"objcopy&nbsp;--only-keep-debug&nbsp;"${tostripfile}"&nbsp;"${debugdir}/${debugfile}"strip&nbsp;--strip-debug&nbsp;--strip-unneeded&nbsp;"${tostripfile}"objcopy&nbsp;--add-gnu-debuglink="${debugdir}/${debugfile}"&nbsp;"${tostripfile}"chmod&nbsp;-x&nbsp;"${debugdir}/${debugfile}"

慕尼黑8549860

查看strip命令的“--only-keep-debug”选项。从链接:目的是将此选项与--add-gnu-debuglink结合使用以创建两部分可执行文件。一个剥离的二进制文件占用RAM和分布中较少的空间,第二个是调试信息文件,仅在需要调试功能时才需要。
随时随地看视频慕课网APP
我要回答