从 Debian 的DebugPackage,我知道在/usr/lib/debug
创建两部分可执行文件(即,剥离可执行文件的符号并将它们放在单独的文件中)时,可执行文件的调试信息文件会进入。
但是,符号文件将引用源文件,我看不到源文件应该放在哪里。在 Red Hat/Fedora 上,我知道它们位于/usr/src/debug
(根据 Fedora 的Packaging:Debuginfo)。
在 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
...
Run Code Online (Sandbox Code Playgroud)
然后有一个看起来像这样的符号配方:
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)/
Run Code Online (Sandbox Code Playgroud)
所以工作流程是:
cd cryptopp
make static dynamic test
sudo make symbols
sudo make install
Run Code Online (Sandbox Code Playgroud)
相关,但不相关(以防有人想发表评论):我不能将符号添加为另一个配方的依赖项,或者只是make symbols
因为其中的错误objcopy
(我认为这是一个错误 - 请参阅Binutil Bug 18064 - objcopy, add-gnu -debuglink 和“无法填充调试链接部分”)。
Debian的二进制包不包括源代码,除了在少数情况下,源代码是非常有用的构建其它软件包(如 liblzo2-dev
为minilzo.c
,或者binutils-source
,gcc-4.9-source
等建筑工具链),或者许多用户希望能够轻松地安装源(例如内核源代码)。源代码包含在一个源代码包中,该包由dpkg-buildpackage
.
安装 Debian 软件包源代码的方法是使用apt-get source
; 在你的情况下
apt-get source cryptopp
Run Code Online (Sandbox Code Playgroud)
用户可以在他们有写访问权限的任何地方执行此操作,这意味着没有规范的源位置。此外,由于包可以在任何地方建造,存储的源位置可能发生变化太...(有一个在Debian的一个有趣的功能,它可以帮助,但:/usr/src
属于src
组,是组可写的,所以在任何用户src
组可以使用该目录而不是root
. 提供源代码的二进制包将源代码安装在/usr/src
.)
因此,要在 Debian 中使用带有相应源代码的调试包,您需要安装调试包,获取如上匹配的源代码,并告诉gdb
如何与directory
和set substitute-path
语句匹配(详细信息请参阅gdb 文档)。
在打包方面,源包会自行处理,如果您使用debhelper
,调试包也会自行处理(自版本 9.20151219 起)。
归档时间: |
|
查看次数: |
2105 次 |
最近记录: |