如何将调试符号从C语言静态库中分离出来,并在GDB中加载。

问题描述 投票:3回答:1

我有一个静态库,它是用"-g "标志编译的对象文件建立的。我把这个静态库的调试信息分离到一个单独的文件中,比如.NET Framework 2.0。objcopy --only-keep-debug lib_mylib.o lib_mylib.o.debug

然后将我的应用程序与这个静态库连接起来(在剥离了调试信息之后),如以下所示 gcc -g driver.c -o driver -L. -l_mylib

谁能指导我如何从静态库中加载调试信息?lib_mylib.o.debug 在我的应用程序中,当我试图通过add-symbol-file命令加载静态库时,我在GDB中得到以下错误。

(gdb) add-symbol-file lib_mylib.a.debug 0x0
add symbol table from file "lib_mylib.a.debug" at
    .text_addr = 0x0
(y or n) y
`/home/sbunny/tmp/static-lib/lib_mylib.a.debug': can't read symbols: File format not recognized.
c debugging gdb static-libraries
1个回答
1
投票

不要这样做。

objcopy --only-keep-debug lib_mylib.o lib_mylib.o.debug

(这只对共享库有效)

可以这样做。

cp lib_mylib.o lib_mylib.o.debug

更简单的方法可能是保留 lib_mylib.o 不受影响,并在链接时将调试符号从可执行文件中剥离出来。

gcc -g driver.c -o driver -L. -l_mylib -Wl,-s

还有更简单的方法: 把二进制文件和调试信息链接起来,保留它用于调试, 但在需要剥离的地方使用剥离的可执行文件。

gcc -g driver.c -o driver-dbg -L. -l_mylib &&
strip -g -o driver driver-dbg

用上面的方法,你就不需要 add-symbol-file,只需将GDB指向 driver-dbg 它将自动完成所有的事情。

© www.soinside.com 2019 - 2024. All rights reserved.