Debian でデバッグパッケージ、2つの部分で構成される実行可能ファイルを作成するときに、実行可能ファイルのデバッグ情報ファイルが入っていることがわかります/usr/lib/debug
(つまり、実行可能ファイルのシンボルを削除して別のファイルに入れます)。
しかし、シンボルファイルはソースファイルを参照しているので、ソースファイルをどこに配置するのかわかりません。 Red Hat / Fedoraは、その場所がどこにあるかを知っています/usr/src/debug
(Fedoraの説明によると)。パッキング:デバッグ情報)。
Debian でデバッグ用のソースファイルはどこに配置する必要がありますか?
具体的な例は Crypto++ です。GNUMakefile
以下を追加するパッチがあります。
IS_DEBIAN = $(shell uname -a 2>&1 | $(EGREP) -i -c "debian|ubuntu|mint")
...
# https://wiki.debian.org/DebugPackage
ifeq ($(IS_DEBIAN),1)
DEBUG_SYM_DIR ?= /usr/lib/debug/cryptopp
DEBUG_SRC_DIR ?= /usr/src/debug/cryptopp
endif
...
それでは、次の象徴的なレシピがあります。
symbol symbols:
$(MKDIR) -p $(DEBUG_SYM_DIR) $(DEBUG_SRC_DIR)
-objcopy --only-keep-debug cryptest.exe cryptest.exe.debug
-objcopy --only-keep-debug libcryptopp.so libcryptopp.so.debug
-strip --strip-debug --strip-unneeded cryptest.exe
-strip --strip-debug --strip-unneeded libcryptopp.so
-$(CP) cryptest.exe.debug $(DEBUG_SYM_DIR)/
-$(CP) libcryptopp.so.debug $(DEBUG_SYM_DIR)/
-objcopy --add-gnu-debuglink=$(DEBUG_SYM_DIR)/cryptest.exe.debug cryptest.exe
-objcopy --add-gnu-debuglink=$(DEBUG_SYM_DIR)/libcryptopp.so.debug libcryptopp.so
-$(CP) *.h *.cpp $(DEBUG_SRC_DIR)/
したがって、ワークフローは次のようになります。
cd cryptopp
make static dynamic test
sudo make symbols
sudo make install
関連があるが関係がない(誰がコメントしたい場合):他のレシピの依存関係でシンボルを追加できないか、単にバグがmake symbols
原因ですobjcopy
(バグだと思います。参照)。Binutilのバグ18064 - objcopy、add-gnu-debuglink、および「デバッグリンクセクションを埋めることができません」)。
答え1
Debian バイナリパッケージにはソースコードは含まれていません。ただし、ソースコードを使用して他のパッケージをビルドできるまれな場合は例外です(例えば liblzo2-dev
forminilzo.c
など)または多くのユーザーがソースコード(カーネルソースコードなど)binutils-source
をgcc-4.9-source
簡単にインストールできるようにしたいです。ソースコードは、が提供するソースコードパッケージの形式で提供されますdpkg-buildpackage
。
apt-get source
あなたの場合、Debianパッケージのソースコードをインストールする方法は次のとおりです。
apt-get source cryptopp
ユーザーは書き込みアクセス権を持っているどこでもこれを行うことができます。つまり、正式なソース位置はありません。また、パッケージはどこでもビルドできるため、パッケージが保存されているソースの場所も変更される可能性があります...(Debianには次のような興味深い機能があり/usr/src
ますsrc
。コードを提供するバイナリパッケージをインストールせsrc
ずにこのディレクトリを使用できます。root
/usr/src
したがって、Debianでそのソースコードを含むデバッグパッケージを使用するには、デバッグパッケージをインストールし、上記のように一致するソースコードを入手し、andステートメントを使用してgdb
一致する方法を教えてください。directory
set substitute-path
gdbドキュメント詳細はこちら)。
パッケージ化の面ではソースパッケージが把握して処理し、使用するとdebhelper
デバッグパッケージも把握して処理します(9.20151219バージョンベース)。