如何停止执行窗口立即关闭?

问题描述 投票:0回答:1

[使用Windows,我在cmd窗口中输入了一个命令,以运行一个具有基本“ Hello,world!”的可执行文件。程序打印的行。但是,当我输入“ start out.exe”命令时,一个窗口将立即打开和关闭。我猜想这个窗口是正在打印hello world消息的窗口,但是它关闭得太快了(也许是因为程序已完成)。我有某种设置导致窗口立即关闭吗?这只是默认值吗?如果是这样,是否有设置或可以更改的内容以防止窗口立即关闭(而无需更改程序的性质)?在此先感谢您的帮助。我见过类似的问题,但是我所见的问题专门针对Linux / Unix,或者建议更改程序本身。

windows terminal command
1个回答
0
投票

如果您拥有。PDB文件,这些文件是在build时生成的(。EXE文件的符号),并且需要程序的。DLL库(在您的情况下,由于“ Hello World”程序的简单性质而不需要),您可以尝试在Visual Studio中将可执行文件作为项目打开,并使用breakpoints将调试器附加到该可执行文件,以停止程序执行在主要回报之前This article shows how to do it as a proof of concept.

通过打开

VS并导航到File-Open-Project / Solution并选择可执行文件,从而<。EXE文件,然后右键单击“解决方案”并按调试-启动新实例PDBDLL文件应位于与EXE文件相同的文件夹中。

debug_exe

如果您还

没有有该程序的源代码,请遵循以下建议以对其进行调试:

为了有效地调试,您甚至还需要用于构建EXE的源代码,即使您只关心几个文件。您需要找到这些文件并在Visual Studio中打开它们。如果源代码与生成的源代码不完全相同,则当您尝试插入断点时,EXE Visual Studio会警告您,并且断点不会绑定。可以从“断点设置”监视窗口覆盖该行为。在设置查看窗口中,单击“必须匹配源”链接文本,然后选中该框以允许源不匹配,如下所示。当然,如果来源不匹配,您将永远无法真正知道会发生什么,因此请自担风险。

免责声明:我不确定在没有源文件的情况下该方法如何有效,但是我认为这是最接近您的答案而不更改实际程序的方法。

作为另一种选择,您可以尝试通过创建一个自定义程序来调用可执行文件,该程序将调用该程序并重定向其

stdout

stderrlike this,例如,或使用pipes] >,check there。自定义程序最终将使用您的原始.exe程序作为可执行文件来创建一个进程,并使用stdout / stderr做一些事情,例如在自定义程序控制台中显示它们或将输出保存到文件中,从而使您可以读取原始程序的输出没有关闭窗口的问题(当然,原始窗口仍会自行关闭,但我认为这对您来说没有太大关系)。或者,如果您想要简单的'肮脏方式,则可以尝试通过创建调用程序Java program来捕获程序输出:

Runtime rt = Runtime.getRuntime(); String[] commands = {"system.exe", "-get t"}; Process proc = rt.exec(commands); BufferedReader stdInput = new BufferedReader(new InputStreamReader(proc.getInputStream())); BufferedReader stdError = new BufferedReader(new InputStreamReader(proc.getErrorStream())); // Read the output from the command System.out.println("Here is the standard output of the command:\n"); String s = null; while ((s = stdInput.readLine()) != null) { System.out.println(s); } // Read any errors from the attempted command System.out.println("Here is the standard error of the command (if any):\n"); while ((s = stdError.readLine()) != null) { System.out.println(s); }

© www.soinside.com 2019 - 2024. All rights reserved.