与编译器相比,为什么调试器在发生错误时更加具体?

问题描述 投票:0回答:2

来自 C++ 思维 - 卷。 1

口译员有很多优势。从写代码到写代码的转变 执行代码几乎是立即的,并且源代码始终是 可用 因此当出现错误时解释器可以更加具体 发生

解释器总是直接处理源代码(在将其逐行翻译成机器代码之后),因此这可能是发生错误时它可以更加具体的原因。

来自:源代码始终可供解释者使用是什么意思?

速度是使用口译员的标准之一。是的,出现错误时可以直接引用源代码。 但是当运行时运行编译后的代码时,它无法引用发生错误的确切行。

现在,调试器怎么样?
GDB 处理编译器产生的输出,因此这里 GCC 和 GDB 处理相同的文件。

与编译器相比,为什么 GDB 能够在确切的行上(在运行时)显示确切的错误?

c++ debugging gdb interpreter
2个回答
2
投票

与编译器相比,为什么 GDB 能够在确切的行上(在运行时)显示确切的错误?

这是两个不同的软件,具有不同的用途。首先你应该明白这一点。

所以这里 GCC 和 GDB 有相同的文件可以处理

不完全是这样,调试器需要在编译过程中生成更多文件。 (称为符号)。这些符号是编译代码和源代码之间的桥梁。

我不太确定 GCC,但它应该有

debug
release
构建选项。 当您在调试模式下编译时,默认情况下会生成帮助 GDB 调试的符号。但在发布模式下,默认符号不会生成,GDB 无法调试发布版本。


0
投票

GDB
中,我们有
-g
选项来构建用于调试目的的代码。 当使用
-g
选项构建代码时,符号故事与
exe
相关联,以帮助
gdb
获取变量和函数位置信息。 当你运行
gdb
时,这个符号表将帮助
gdb
了解代码的行号。 如果你想知道你的
exe
是否有符号表,请尝试这个命令 -
file <exe>
此命令将为您提供信息
exe
是否有符号表。 如果您的
exe
有符号表,则此命令的结果将包含 ----- 未剥离的关键字。

此外,如果您尝试在没有符号表信息的情况下将

gdb
附加到
exe
上,
gdb
会警告您无法找到符号表,并且无法将
exe
附加到
gdb

当您使用

exe
连接到
gdb
时 - 您需要键入
run
命令来运行
exe
。 希望这有帮助。

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