我正在尝试完成Problem 4 of Project Euler,而且我一直在努力调试我的解决方案已有一段时间了。错误本身不是我的问题的一部分 - 我无法弄清楚为什么GDB不会向我显示找出错误所需的数组值。
每当gdb到达此循环时,
for (int i = numDigits; i > 0; i--) {
numArray[i-1] = prevPalindrome % 10;
prevPalindrome /= 10;
我无法通过命令print numArray
或print numArray[0]
或print numArray[5]
从GDB获取值。
GDB改为执行以下操作:
print numArray
返回$1 = <optimized out>
print numArray[0]
和print numArray[5]
返回`值已经过优化'我已经搜索过StackOverflow以解决这个问题。我尝试了以下方法,但没有一个有效:
-O0
(其命令为clang -ggdb3 -O0 -std=c99 -Wall -Werror test.c -lcs50 -lm -o test
),因此我尝试仅使用clang -O0 test.c -lcs50 -lm -o test
。这没有做任何事情。 -0g
,但我遇到了编译错误。<optimized out>
。<optimized out>
。我在这里缺少什么吗?我不应该只能打印数组值吗?
完整代码可用here,第95行有问题循环。
答案 0 :(得分:1)
我可以想到两个可能的原因:
-O0
二进制文件,但实际上正在调试-O2
或-O3
二进制文件。为了消除#1的可能性,在访问numArray
之前添加abort(),重建程序,在GDB下运行它,并确认它以SIGABRT
消亡。如果没有,我的猜测是正确的,你正在调试一个与你认为正在调试的二进制文件不同的二进制文件。
答案 1 :(得分:0)
只是-g
会有效吗?另外,请忽略O0
。与clang -g -std=c99 -Wall -Werror test.c -lcs50 -lm -o test
中一样。