繁体   English   中英

如何让Debug.WriteLine与其他进程一起使用?

[英]How to get Debug.WriteLine to work with other processes?

我有一个使用System.Diagnostics.Process生成另外两个进程的程序。 他们的输出由第一个程序捕获:

            players[p.Key].StartInfo = new ProcessStartInfo
            {
                FileName = args[i],
                RedirectStandardInput = true,
                RedirectStandardOutput = true,
                UseShellExecute = false
            };

我正在尝试调试这些子过程。 Debug.WriteLine在主程序中运行,但在从子进程内调用时不会捕获它。 我怎样才能让它发挥作用?

有没有办法“重定向”呢? 或者在VS中为子过程打开一个输出窗口?

您可以使用DbgView( http://technet.microsoft.com/en-us/sysinternals/bb896647.aspx )捕获每个进程的所有Debug.WriteLine输出。

您也可以按流程过滤/突出显示,这可能会有所帮助。

实际上,这可能无法捕获VS实际正在调试的进程,因此您将获得VS中的顶级进程跟踪以及DbgView中的其他进程,这可能会很好地解决。

在开发过程中(或在丑陋的控制台窗口无关紧要的系统上)另一个可能有用的技术是将跟踪输出重定向到控制台,如下所示:

Trace.Listeners.Add(new ConsoleTraceListener())

您可以通过调用AllocConsole()来向任何应用程序添加控制台,您需要通过在代码中添加以下声明来调用它:

using System.Runtime.InteropServices;

[DllImport("kernel32.dll", SetLastError = true)]
static extern void AllocConsole();

请参阅: http//msdn.microsoft.com/en-us/library/system.diagnostics.consoletracelistener.aspx

您还可以将配置文件添加到子进程的exe文件中,以创建TextWriterTraceListener并将该exe的所有日志消息写入日志文件:

<configuration>
    <system.diagnostics>
        <trace autoflush="true" indentsize="4">
            <listeners>
                <add name="TextListener" 
                    type="System.Diagnostics.TextWriterTraceListener"
                    initializeData="trace.log" />
            <remove name="Default" />
            </listeners>
        </trace>
    </system.diagnostics>
</configuration>

如果程序名为myapp.exe则配置文件的名称必须为myapp.exe.config ,并且配置文件需要与exe文件放在同一个文件夹中才能被选中。

另请注意,使用System.Diagnostics.Debug命名空间中的方法创建的输出仅在Debug构建中可用。 如果要在发布版本中创建跟踪消息,可以使用System.Diagnostics.Trace命名空间中的等效WriteLine方法。

Trace.WriteLineDebug.WriteLine实际上都在引擎下调用相同的Windows API方法: OutputDebugString 您还可以直接从.NET应用程序全局附加到此类方法调用的输出。 CodeProject上的一篇文章详细描述了必要的步骤:

DbMon.NET - 一个简单的.NET OutputDebugString捕获器

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM