《如何在缺少调试符号的情况下调试Linux程序》
文章内容(润色后):
在前面的两篇文章中,我们介绍了如何正确分离可执行程序及其调试符号,以及如何对ELF目标文件进行瘦身以删除调试符号。这些操作为我们提供了一个基础,以便在正式发布程序时删除调试符号,从而提高程序的性能和安全性。然而,这也带来了调试方面的挑战。那么,我们该如何解决这一问题呢?
以我们之前提到的工程为例,该工程由4个源文件组成,其中main.c包含main函数。首先,我们编译工程并生成可执行文件prog:
gcc -g -o prog main.c mod1.c mod2.c mod3.c
然后,我们将prog的调试符号保存到prog.sym:
如何在缺少调试符号的情况下调试Linux程序
objcopy --only-keep-debug prog prog.sym
接下来,我们删除prog中的符号信息:
strip --strip-all prog
现在,当我们尝试使用gdb调试prog时,会发现main、mod1_func等符号都无法识别,无法进行符号化的调试。
gdb ./prog
Reading symbols from ./prog...
(No debugging symbols found in ./prog)
(gdb) starti
Starting program: /root/work/v1/gdb/no-symbols/test1/prog
Program stopped.
0x00007ffff7fd0100 in ?? () from /lib64/ld-linux-x86-64.so.2
(gdb) list main
Function "main" not defined.
(gdb) list mod1_func
Function "mod1_func" not defined.
幸运的是,我们可以利用保存好的符号文件prog.sym来进行调试。GDB的symbol-file
命令可用于加载可执行文件的符号文件。如下所示:
(gdb) symbol-file prog.sym
现在,我们可以正常地列出main函数和mod1_func函数,并进行符号化的调试了。
本文主题词:缺少调试目标,缺少调试目标请生成项目并重试,linux缺少了要操作的目标文件,linux缺少操作数是什么意思,缺省的linux系统中,vs2010缺少调试目标,由于缺少调试目标,缺少调用文件v5_hook.dll,vs缺少调试目标,重新相应的设置,visual缺少调试目标