gpt4 book ai didi

c++ - gdb 可以查看所有源代码吗?

转载 作者:行者123 更新时间:2023-11-28 05:58:10 26 4
gpt4 key购买 nike

当我意识到发布版本中的可执行文件是使用 -g 标志编译的时,我正在为 Linux 调试用 C++ 创建的应用程序。

我担心的是是否可以使用列表或回溯(利用一些已知的核心转储或 antoher 方法)通过 gdb 读取可执行文件的源代码

最佳答案

不,源代码不包含在可执行文件中,即使使用 -g 编译也是如此。包含的是对源代码的引用,因此程序地址与文件和行号之间存在映射。

调试中还会有描述你程序中函数的信息,所以会有描述每个函数的信息,获取和返回的类型,它包含哪些局部变量,还有关于哪些地址对应哪些信息功能。您的所有类型和全局变量也将在调试信息中进行描述。

可以使用 objcopy 将调试信息从程序中分离出来,以下摘自 gdb 在线手册 (https://sourceware.org/gdb/onlinedocs/gdb/Separate-Debug-Files.html)

objcopy --only-keep-debug foo foo.debug
strip -g foo
objcopy --add-gnu-debuglink=foo.debug foo

这从 foo 中取出调试信息并将其放入 foo.debug 中,从 foo 中去除调试信息并添加foo.debugfoo 之间的链接。

现在,作为开发人员,您可以通过加载包含调试数据的附加 foo.debug 文件来调试发布版本,而客户仅获得 foo 等看不到调试信息。

可以在此处找到有关创建拆分调试信息的更详细信息 How to generate gcc debug symbol outside the build target?

关于c++ - gdb 可以查看所有源代码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33781828/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com