2

我需要从网站上的代码中输出一些调试信息。

我如何OutputDebugString从 ASP.net 网站调用,并让运行 DbgView 的用户看到它

注意:网站不支持System.Diagnostics.Trace.TraceWarning(...)

4

1 回答 1

-1

好的,这是一个完整的例子。它是一个控制台,但原理和代码大致相同。我今天无法在我的机器上测试从 OutputDebugString 捕获,因为我没有管理员权限。在服务器上,您将写入 TextWriterTraceListener 而不是控制台。如果您无法使用 pinvoke 从 OutputDebugString 写入和读取,可能是客户没有权限或应用程序没有必要的权限。

还!如果 Debug.WriteLine 没有出现,可能网站是在 RELEASE 模式下编译的,而 DEBUG 没有定义。TRACE 默认是为 RELEASE 和 DEBUG 定义的。TraceSource 会写入 OutputDebugString ,除非您已清除默认侦听器,许多人出于习惯这样做,因为根据我的经验,OutputDebugString 可能会减慢速度,尤其是如果您目前实际上没有查看输出。

using System.Diagnostics;
using System.Runtime.InteropServices;

namespace TraceToOutputDebugString
{
    class Program
    {
        [DllImport("kernel32.dll")]
        static extern void OutputDebugString(string lpOutputString);

        static void Main(string[] args)
        {
            //Put these lines in your asp.net Page
            OutputDebugString("Hello from Pinvoke OutputDebugString");
            TraceSource trace = new TraceSource("app");
            trace.TraceInformation("Hello from TraceSource");
            Trace.TraceInformation("Hello from 1.1 Trace.TraceInformation");
            Debug.WriteLine("Hello Debug.WriteLine");
            System.Console.ReadKey();
        }
    }
}

这是配置。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <system.diagnostics>
        <sources>
            <source name="app" switchName="app">
                <listeners>
                    <add name="Console" type="System.Diagnostics.ConsoleTraceListener"/>
                </listeners>
            </source>
        </sources>
        <switches>
            <add name="app" value="Information"/>
        </switches>
        <trace>
            <listeners>
                <add name="Console" type="System.Diagnostics.ConsoleTraceListener"/>
            </listeners>
        </trace>
    </system.diagnostics>
</configuration>
于 2012-10-18T18:23:51.053 回答