我是第一次尝试调试工具,我遇到了以下问题:
当我使用调试器逐步执行代码时,当我进入函数ComputeInterest()
并将注意放在i
上时(标记为i
并右键单击它),看通知我
'i'在当前上下文中不可用
我也很好奇为什么watch还没有将i
放入局部变量中。这是我的代码:
#include <iostream>
double computeInterest (double base_val, double rate, int years)
{
double final_multiplier;
for ( int i = 0; i < years; i++ )
{
final_multiplier *= (1 + rate);
}
return base_val * final_multiplier;
}
int main ()
{
double base_val;
double rate;
int years;
cout << "Enter a base value: ";
cin >> base_val;
cout << "Enter an interest rate: ";
cin >> rate;
cout << "Enter the number of years to compound: ";
cin >> years;
cout << "After " << years << " you will have " << computeInterest( base_val, rate, years ) << " money" << endl;
}
我正在使用Code:Blocks,g ++(GCC)4.8.1和GNU gdb(GDB)7.6.1的最新版本13.12。
答案 0 :(得分:4)
i
已定义并仅存在于该范围内(for循环):
for ( int i = 0; i < years; i++ )
{
final_multiplier *= (1 + rate);
}
因此,一旦您进入其中一条线路,您就可以检查“我”。一旦你离开这个循环,i
将再次无法使用。
修改强>
确保构建时没有优化(-O0)和调试信息(-g)编译标记。
<强> EDIT2:强>
它也可能是GDB问题。因为我也使用过GDB v7.5.1,如果我没记错,并且有相同的行为。也许在更高版本的GDB上,您将获得预期的行为。正如下面评论中提到的Baum mit Augen,GDB v7.9的行为符合您的预期。