【问题标题】:Debug arrays in Codeblocks在代码块中调试数组
【发布时间】:2020-04-23 07:01:15
【问题描述】:

在代码块中我正在尝试调试程序

int main() {
fast;
vector<int> a;
for(int i=0; i<10; i++) a.push_back(i);
for(int i=9; i>=0; i--) cout << a[i] << ' ';
cout << endl;
int b[10];
for(int i=0; i<10; i++) b[i]=i;
for(int i=9; i>=0; i--) cout << b[i] << ' ';
}

所以,当我打开调试模式并通过单击“下一行”进行调试时,我看到在最后一行调试器转到了声明向量 a 的行并且不打印数组 b

所以如果我删除关于向量 a 的代码,调试器就不会显示数组 b。

这是如何工作的?

【问题讨论】:

  • 我认为你必须使用“step over”而不是“step in”
  • 在调试面板中找不到“跳过”按钮
  • 我认为它的快捷方式是 f5 或 f6 或 f7;试一试
  • f5 是一个切换断点,f7 - 下一行

标签: c++ debugging codeblocks


【解决方案1】:

Code::blocks 提供调试功能。我们可以观察变量的值,一步一步执行。

创建项目 通过在您想要的行号处单击鼠标右键并选择切换断点来添加断点。 单击调试菜单并形成调试窗口选项选择监视窗口。 在 watch 窗口中可以看到变量的值,断点后的逐步执行使用 shift+F7 键。

我的答案可能对你来说不是很清楚,或者你可以关注这个代码块维基页面http://wiki.codeblocks.org/index.php?title=Debugging_with_Code::Blocks了解更多信息

【讨论】:

  • 我觉得还是用F7比较好,因为Shift+F7会把你带到模块STL C++的巨量代码。我的问题已经解决了,解决方法在上面
【解决方案2】:

我发现我忘记从模板中删除行 fast;,它的作用是

#define fast cin.tie(0);cout.tie(0);cin.sync_with_stdio(0);cout.sync_with_stdio(0);

这破坏了调试模式下数组的输出。

@N.Shead 的 UPD:您还可以使用 flushendl 打印缓冲区。

【讨论】:

  • 只是一个想法,但您也可以通过在打印数组后添加std::cout &lt;&lt; std::flush(或std::endl)来保持fast 宏的工作。这是因为您的 faststd::cout 会被缓冲,并且不会自动写入终端,除非其缓冲区已满或您明确刷新它。 (请注意,您的程序完成也会刷新流。)
  • @N.Shead 是的,这也有帮助。我之前猜想endl会影响打印,现在我也要使用flush :)
  • std::cout &lt;&lt; std::endlstd::cout &lt;&lt; '\n' &lt;&lt; std::flush 几乎相同;你不需要两个!如果你想要换行符,那么 std::endl 就足够了;如果您不想要它,那么std::flush 是正确的。 (重读你的评论你可能已经明白了,但只是说清楚)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-11-22
  • 1970-01-01
  • 2012-05-28
  • 1970-01-01
  • 1970-01-01
  • 2018-08-28
  • 2019-03-14
相关资源
最近更新 更多