以下代码在运行时运行正常,但是当使用Eclipse在调试模式下运行时会出现问题,它不会等待输入而是继续运行,并且会向控制台打印一些看似随机的值。它也不会在断点处停止。
int main() {
int N, Q, maxSize;
cout <<"Enter a number"<<endl;
int test;
cin >> test;
cout << test <<endl;
}
答案 0 :(得分:4)
<强>更新强>
从CDT 9.4(Eclipse Oxygen.2)开始,启动配置中有一个复选框,只需单击一下即可完成此操作。见https://wiki.eclipse.org/CDT/User/NewIn94#Debug
原始回答
这里的问题是在同一个stdin频道上有两个读者。当你做cin
时,Eclipse CDT也试图读取stdin以进行GDB-MI通信。
幸运的是,有一种解决方法,您可以让GDB为正在运行的程序创建一个单独的控制台。这意味着不共享句柄。
为此,请在项目的根目录中使用以下内容创建.gdbinit
文件:
set new-console on
并在Eclipse中调试您的控制台应用程序,以满足您的需求:
更多信息
您可以在调试器选项卡中设置要用于调试配置的gdbinit文件。将 GDB命令文件设置为您创建的文件的名称。
您可以通过编辑 C / C ++ - &gt;中的首选项来设置默认 GDB命令文件以用于新创建的调试配置。 调试 - &gt; GDB 页面:
Eclipse CDT不在主目录中使用.gdbinit。这是有目的的,因为那里的.gdbinit通常设置用于CLI调试,并且很容易干扰Eclipse与GDB正常通信所需的MI接口。