一般来说,习惯上为debug版程序加入调试信息,release版程序不加调试信息。
这样做有一个缺点,如果程序中没有加入调试信息,在程序发生崩溃时,就不得不去分析程序的汇编代码,这会增加定位问题的难度。并不是所有人都能看得懂汇编。
反过来,如果在release版中加入调试信息,那么使用程序的人就很容易能看到我们的代码,这是我们不希望看到的。
其实,可以用strip程序把执行程序和符号表分离,发布程序不带符号表,当发生问题需要调试时,把符号表加载进去。
#!/bin/bash
function errorexit()
{
errorcode=${1}
shift
echo $@
exit ${errorcode}
}
function usage()
{
scriptname=`basename ${0}`
echo "USAGE ${scriptname} <tostrip>"
}
function strip_symbol()
{
to_strip_dir=`dirname "$1"`
to_strip_file=`basename "$1"`
if [ -z ${to_strip_file} ] ; then
usage
errorexit 0 "tostrip must be specified"
fi
cd "${to_strip_dir}"
symbol_dir=.debug
symbol_file