【问题标题】:Debug window closes immediately [duplicate]调试窗口立即关闭[重复]
【发布时间】:2013-02-06 13:11:54
【问题描述】:

当我尝试调试我的小程序时,它会立即关闭。这是我正在使用的代码。

#include <iostream>

using namespace std;

int main()
{
    int gt1, gt2;
    cout << "Hello World!" << endl;
    return 0;
}

仅 0.5 秒,黑框就会出现并关闭。

有什么办法可以防止这种情况发生吗?

【问题讨论】:

  • return 0;之前添加这一行:system("pause");
  • 如果要打印告别信息什么的,用户可以看到。
  • @AlexdeLange 用户不会从调试器运行您的程序,而是(很可能)从控制台窗口运行。在这种情况下,输出将简单地保留在控制台窗口中。
  • @AlexdeLange:控制台程序通常会从控制台运行。所以所有这些system("pause")cin.get()getch() 的建议都会使通常的(即控制台)外观有点尴尬,因为用户必须无缘无故地敲击某个键。不要因为您的调试习惯不符合调试器的行为而更改代码 - 更改您的调试习惯(即,如果您不希望程序如此快终止,请设置断点)。

标签: c++ visual-c++


【解决方案1】:

在您的代码中设置一个断点,以便您可以对其进行调试。只需点击源左侧的栏即可。

【讨论】:

  • +1 是唯一便携、非侵入性的答案!
  • 如果我使用emacsvim编辑器,如何设置断点?
  • @Krishna 这个问题是给Visual Studio的。在emacs 中,您可以使用Grand Unified DebuggerC-b
  • 感谢@peter 的明智之言。
【解决方案2】:

您的函数完成并将控制权返回给调试器。这就是你看到屏幕关闭的原因。这种行为(调试)与从 Visual 运行程序不同(最后会看到“按任意键...”行。

出于调试目的,您可以在“return”之前添加以下两行:

char ch;
cin.get(&ch);

这将在终止之前等待任何按键被按下。

【讨论】:

  • 如果流中还有一些东西,它无论如何都会终止程序。如果没有,程序将停止,什么也不告诉用户,他会想知道为什么什么都没有发生。不要为了让调试更“舒适”而引入糟糕的可用性。
  • 我只是解释了这个例子中发生的事情,顺便说一句,在这个特定的情况下,输入流中没有 nothing。这不是关于教对错的问题,所以请不要太像导师。
【解决方案3】:

return 0之前的代码末尾添加cin.get();

【讨论】:

    猜你喜欢
    • 2021-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-24
    • 2020-11-08
    相关资源
    最近更新 更多