在visual studio中捕获控制台应用程序的输出

时间:2011-01-20 14:43:34

标签: c++ visual-studio visual-studio-2010 stdout

我有一个简单的控制台应用程序,在Visual Studio 2010中为我提供了一些预构建功能。它继续产生其他子进程(但等待这些子进程的终止。

当我在visual studio外部运行应用程序时,它的所有消息等都出现在控制台窗口中(即stdout)。但是,当我在VS下运行此应用程序时,我没有在构建窗口中看到任何输出。

有人知道这是为什么吗?

非常烦人。

编辑:在进一步检查时,我设法让我的应用程序的stdout出现,但子进程的stdout没有出现。有什么想法吗?

我使用以下代码重定向子进程的stdout:

STARTUPINFO si;
GetStartupInfo( &si );

si.dwFlags      = STARTF_USESTDHANDLES;
si.hStdError    = GetStdHandle( STD_ERROR_HANDLE );
si.hStdInput    = GetStdHandle( STD_INPUT_HANDLE );
si.hStdOutput   = GetStdHandle( STD_OUTPUT_HANDLE );

PROCESS_INFORMATION pi;

// Create the process.
if ( !CreateProcess( applicationName.GetCStr(), cmd.CStr(), NULL, NULL, TRUE, 0, NULL, workingDir.GetCStr(), &si, &pi ) )
{
    // Failed to create process!!
    return false;
}

1 个答案:

答案 0 :(得分:1)

我认为你需要为子进程制作显式句柄来连接它们。 MSDN上有一篇文章(或几篇),例如http://msdn.microsoft.com/en-us/library/ms682499%28v=vs.85%29.aspx

子进程继承开放对象句柄,但有自己的stdin / stdout / etc。处理,除非你通过适当的箍明确地为它创建它们。无论如何,这是我的理解;阅读文章了解更多信息。