GDB / DDD 在当前上下文中没有符号 <var>
GDB / DDD no symbol <var> in current context
我找到了这个问题的旧解决方案,建议使用 -gdwarf-2
进行编译,但这个解决方案对我不起作用或不再适用。
因此,运行 ddd 编译文件然后双击变量总是导致错误 no symbol <var> in current context
我的程序是这样的:
int main()
{
for (int i = 0; i < 10; ++i)
{
}
}
我使用的命令是这些:
g++ -g -O0 -gdwarf-2 test.cpp; ddd. ./a.out
程序版本:
ddd: GNU DDD 3.3.12 (x86_64-pc-linux-gnu)
gdb: GNU gdb (Ubuntu 7.7.1-0ubuntu5~14.04.2) 7.7.1
gcc: gcc version 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.3)
我怎样才能使这个工作?
您是否尝试过从编译标志中删除 -gdwarf-2?在具有旧调试器的系统上使用新编译器时,我遇到了类似的问题。然后编译器使用的默认调试符号格式对于调试器来说太新了,我不得不让编译器使用旧格式。如果最近更新了调试器,这可能与此类似。
为了 print/display 变量,它们必须在范围内,因此对于本地 variables/parameters 这意味着您必须在该范围内的断点处。
我可以通过使用您的示例程序启动 ddd 并立即尝试 print/display i
.
来重现您遇到的错误
一旦我在 for
行和 运行 程序上设置断点,我就可以按预期 print/display 它们。
我编译了:
g++ -Wall -O0 -ggdb -o test.exe test.cpp
和运行 ddd 与
ddd ./test.exe
我有
GNU DDD 3.3.12 (x86_64-pc-linux-gnu)
GNU gdb (Ubuntu 7.11.1-0ubuntu1~16.04) 7.11.1
gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.1)
我找到了这个问题的旧解决方案,建议使用 -gdwarf-2
进行编译,但这个解决方案对我不起作用或不再适用。
因此,运行 ddd 编译文件然后双击变量总是导致错误 no symbol <var> in current context
我的程序是这样的:
int main()
{
for (int i = 0; i < 10; ++i)
{
}
}
我使用的命令是这些:
g++ -g -O0 -gdwarf-2 test.cpp; ddd. ./a.out
程序版本:
ddd: GNU DDD 3.3.12 (x86_64-pc-linux-gnu)
gdb: GNU gdb (Ubuntu 7.7.1-0ubuntu5~14.04.2) 7.7.1
gcc: gcc version 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.3)
我怎样才能使这个工作?
您是否尝试过从编译标志中删除 -gdwarf-2?在具有旧调试器的系统上使用新编译器时,我遇到了类似的问题。然后编译器使用的默认调试符号格式对于调试器来说太新了,我不得不让编译器使用旧格式。如果最近更新了调试器,这可能与此类似。
为了 print/display 变量,它们必须在范围内,因此对于本地 variables/parameters 这意味着您必须在该范围内的断点处。
我可以通过使用您的示例程序启动 ddd 并立即尝试 print/display i
.
一旦我在 for
行和 运行 程序上设置断点,我就可以按预期 print/display 它们。
我编译了:
g++ -Wall -O0 -ggdb -o test.exe test.cpp
和运行 ddd 与
ddd ./test.exe
我有
GNU DDD 3.3.12 (x86_64-pc-linux-gnu)
GNU gdb (Ubuntu 7.11.1-0ubuntu1~16.04) 7.11.1
gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.1)