gpt4 book ai didi

c - C 编程中的调试

转载 作者:行者123 更新时间:2023-11-30 21:36:31 24 4
gpt4 key购买 nike

我是调试方法的新手,有很多东西我无法理解。

这里的主要问题是我想确认我的图像文件是否包含我的源代码,那么任何人都可以使用列表命令等调试功能获取源代码。

调试用于图像文件,例如exe扩展名

我在 gdb 中看到一些命令,例如“list 命令”

如果我可以列出我所有的源代码,这就是安全可靠的,我的意思是调试器将能够看到我所有的代码。

如果我的代码编译为发布版本,list 命令仍然能够显示我的所有源代码吗?

此外,调试的好处是什么,我的意思是我可以使用测试单元测试、破坏测试或其他测试。

那么为什么要调试呢。当我的软件编译完成后,知道它的错误有什么用。

我终于可以对源代码本身进行调试了吗?

简单地说,我想知道调试的核心需求。

我确信这会得到很多反对票,但我不介意我是否能理解调试的核心需求。

最佳答案

首先,任何 C 应用程序都将被编译为机器代码。它必须始终包含正确运行的程序逻辑。将机器代码反编译回原始源代码仍然很困难,因为在编译和链接阶段会丢失许多信息(例如变量名称等)。

为了让调试器提供有关变量名称的所有必要信息,有时甚至提供精确的源代码,必须在编译过程中将必要的信息写入某处。对于 ELF 可执行文件,默认情况下以称为 DWARF 的格式编写在单独的 ELF 部分中。为此,您必须使用 -g 选项 (gcc) 编译应用程序。使用 objcopy 和 strip 等工具,您可以删除调试部分并将它们存储在单独的文件中,这是非常需要的。

这对于调试很有用,如果您的应用程序以 core 文件的形式崩溃(因此称为“核心转储”),也可以报告出现的问题。

删除调试信息可以提供一定的安全性,但不会阻止顽固的对手对您的源代码进行逆向工程。

关于c - C 编程中的调试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49602101/

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