[解決済み] ビルドターゲットの外にgccのデバッグシンボルを生成する方法は?
2022-04-22 17:09:31
質問
gオプションでデバッグシンボルを生成できることは知っています。しかし、そのシンボルはターゲットファイル内に埋め込まれてしまいます。gccは結果の実行ファイル/ライブラリの外側にデバッグシンボルを生成することができますか?WindowsのVC++コンパイラの.pdbファイルのように。
解決方法は?
を使用する必要があります。 objcopy から デバッグ情報を分離する :
objcopy --only-keep-debug "${tostripfile}" "${debugdir}/${debugfile}"
strip --strip-debug --strip-unneeded "${tostripfile}"
objcopy --add-gnu-debuglink="${debugdir}/${debugfile}" "${tostripfile}"
私は以下のbashスクリプトを使って、デバッグ情報を.debugディレクトリの拡張子.debugのファイルに分離しています。この方法で、ライブラリと実行ファイルを1つのtarファイルに、.debugディレクトリを別のtarファイルにすることができます。後でデバッグ情報を追加したい場合は、単にデバッグ tar ファイルを展開するだけで、シンボリックデバッグ情報を手に入れることができます。
これがbashスクリプトです。
#!/bin/bash
scriptdir=`dirname ${0}`
scriptdir=`(cd ${scriptdir}; pwd)`
scriptname=`basename ${0}`
set -e
function errorexit()
{
errorcode=${1}
shift
echo $@
exit ${errorcode}
}
function usage()
{
echo "USAGE ${scriptname} <tostrip>"
}
tostripdir=`dirname "$1"`
tostripfile=`basename "$1"`
if [ -z ${tostripfile} ] ; then
usage
errorexit 0 "tostrip must be specified"
fi
cd "${tostripdir}"
debugdir=.debug
debugfile="${tostripfile}.debug"
if [ ! -d "${debugdir}" ] ; then
echo "creating dir ${tostripdir}/${debugdir}"
mkdir -p "${debugdir}"
fi
echo "stripping ${tostripfile}, putting debug info into ${debugfile}"
objcopy --only-keep-debug "${tostripfile}" "${debugdir}/${debugfile}"
strip --strip-debug --strip-unneeded "${tostripfile}"
objcopy --add-gnu-debuglink="${debugdir}/${debugfile}" "${tostripfile}"
chmod -x "${debugdir}/${debugfile}"
関連
-
[解決済み】「The breakpoint will not currently be hit」を改善するには?このドキュメントにはシンボルが読み込まれていません。" という警告はどうすれば改善されますか?
-
[解決済み] なぜGCCはa*a*a*a*aを(a*a*a)*(a*a*a)に最適化しないのでしょうか?
-
[解決済み] Node.jsアプリケーションをデバッグするにはどうすればよいですか?
-
[解決済み] g++とgccの違いは何ですか?
-
[解決済み] 8192個の要素にループをかけると、プログラムが遅くなるのはなぜですか?
-
[解決済み] プログラムがクラッシュしたときにスタックトレースを自動的に生成する方法
-
[解決済み] .soファイル内のシンボルを一覧表示する方法
-
[解決済み] CMakeにおけるデバッグとリリースの比較
-
[解決済み] なぜGCCは、速度の代わりにサイズに最適化すると、15-20%速いコードを生成するのですか?
-
[解決済み】LinuxでGCCのデフォルトインクルードパスを追加する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] g++ 出力: ファイルが認識されません。ファイル形式が認識されない
-
[解決済み] CMakeビルドモード RelWithDebInfo
-
[解決済み] gcc エラー:間違った ELF クラスです。ELFCLASS64
-
[解決済み] プリプロセッサー出力
-
[解決済み] シュール vs サール ... x86 アセンブリ gnu
-
[解決済み] gccの-lpthreadオプション
-
configure: エラー: $PATH に受け入れ可能な C コンパイラがありません。
-
gccコンパイルオプション -fpermissive
-
[解決済み】-Wl,-rpath -Wlがわかりません。
-
[解決済み] ライブラリを静的にリンクするようにgccに直接指示する