来自 C++ 思维 - 卷。 1:
口译员有很多优势。从写代码到写代码的转变 执行代码几乎是立即的,并且源代码始终是 可用 因此当出现错误时解释器可以更加具体 发生。
解释器总是直接处理源代码(在将其逐行翻译成机器代码之后),因此这可能是发生错误时它可以更加具体的原因。
速度是使用口译员的标准之一。是的,出现错误时可以直接引用源代码。 但是当运行时运行编译后的代码时,它无法引用发生错误的确切行。
现在,调试器怎么样?
GDB 处理编译器产生的输出,因此这里 GCC 和 GDB 处理相同的文件。
与编译器相比,为什么 GDB 能够在确切的行上(在运行时)显示确切的错误?
与编译器相比,为什么 GDB 能够在确切的行上(在运行时)显示确切的错误?
这是两个不同的软件,具有不同的用途。首先你应该明白这一点。
所以这里 GCC 和 GDB 有相同的文件可以处理
不完全是这样,调试器需要在编译过程中生成更多文件。 (称为符号)。这些符号是编译代码和源代码之间的桥梁。
我不太确定 GCC,但它应该有
debug
和 release
构建选项。
当您在调试模式下编译时,默认情况下会生成帮助 GDB 调试的符号。但在发布模式下,默认符号不会生成,GDB 无法调试发布版本。
在
GDB
中,我们有 -g
选项来构建用于调试目的的代码。
当使用 -g
选项构建代码时,符号故事与 exe
相关联,以帮助 gdb
获取变量和函数位置信息。
当你运行gdb
时,这个符号表将帮助gdb
了解代码的行号。
如果你想知道你的 exe
是否有符号表,请尝试这个命令 - file <exe>
此命令将为您提供信息 exe
是否有符号表。
如果您的 exe
有符号表,则此命令的结果将包含 ----- 未剥离的关键字。
此外,如果您尝试在没有符号表信息的情况下将
gdb
附加到 exe
上,gdb
会警告您无法找到符号表,并且无法将 exe
附加到 gdb
。
当您使用
exe
连接到 gdb
时 - 您需要键入 run
命令来运行 exe
。
希望这有帮助。