热点推荐

查看: 71|回复: 0
收起左侧

[资料] C#使用DebugView监听程序的调试信息

[复制链接]
  • TA的每日心情
    点赞
    9 分钟前
  • 签到天数: 392 天

    连续签到: 11 天

    [LV.9]以坛为家II

    102

    主题

    468

    帖子

    2528

    积分

    Rank: 9

    积分
    2528

    热心会员突出贡献切换助手验证会员最佳新人

    发表于 5 天前 | 显示全部楼层 |阅读模式

    51Halcon诚邀您的加入,专注于机器视觉开发与应用技术,我们一直都在努力!

    您需要 登录 才可以下载或查看,没有帐号?会员注册

    x
    DotNet程序的调试,是DotNet程序员必备的技能之一,开发出稳定的程序、解决程序的疑难杂症都需要很强大的调试能力。DotNet调试有很多方法和技巧。现在本文就介绍一下借助DebugView工具进行调试的方法,以及由DebugView引申出来的知识点。

    DebugView
    DebugView是一个查看调试信息的非常棒的工具,支持Debug、Release模式编译的程序,甚至支持内核程序,而且能够定制各种过滤条件,让你只看到关心的输出信息,而且可以定制高亮显示的内容等等,非常方便。
    210000211464079.png
    捕捉Release模式的Win32程序输出的调试信息,需要选中Capture Global Win32选项:
    210000234438476.png
    过滤与高亮功能
    210000247879732.png
    可以通过include、exclude设置过滤条件,包含指定字符串的输出信息将会被过滤。还可以通过exclude条件过滤掉对应进程ID的调试信息。多个条件使用“;”分隔,而且支持“*”通配符。

    远程调试
    DebugView支持远程捕捉调试信息。首先在远程机器上通过如下命令启动DebugView:
    1. DebugView.exe /a /t /g /s
    复制代码

    这样,DebugView就会以服务的方式运行,如下图:
    210000259905032.png
    然后在本地机器上启动DebugView,并通过Connect连接到远程机器的DebugView,当远程机器中有调试信息输出时,本地就会捕获到,并展示出来:
    210000268656131.png

    输出信息到DebugView的几种方式
    DebugView的一些功能是不是让你心动了呢。俗话说心动不如行动,但是在行动之前,首先要知道C#如何将调试信息输出到DebugView中。

    通过编程输出一些调试信息到DebugView中,一共有三种方式:
    Debug.WriteLine
    Debugger.Log
    Kernal32.dll中的OutputDebugString方法

    一、Debug.WriteLine
    通过Debug.WriteLine可以将调试信息写入到DebugView中,如下:
    1. Debug.WriteLine("这是调试信息");
    复制代码

    效果如下:
    210000286312559.png
    不过此方式只能在Debug模式下有效。具体原因下面会详细介绍。

    二、Debugger.Log
    Debug.WriteLine已经很好用了,唯一的缺点就是在Release模式下无效。那么在Release模式下就可以使用Debugger.Log方法,示例如下:
    1. Debugger.Log(0, null, "这是Debugger.Log输出的调试信息");
    复制代码

    三、Kernel32.dll中的OutputDebugString方法
    做C++开发的应该知道可以通过OutputDebugString这个API开实现输出调试信息到DebugView中吧。那么C++能做的,C#也能做。可以通过PInvoke的方式引入此方法,这个API属于Kernel32.dll,如下声明:
    1. [DllImport("kernel32.dll", CharSet=CharSet.Auto)]
    2. public static extern void OutputDebugString(string message);
    复制代码

    然后就可以通过调用此方法,将调试信息输出到DebugView中。

    建议大家用第三种方式,C#特别适合使用:
    1. using System.Text;
    2. using System.Runtime.InteropServices;

    3. namespace VisionDebug
    4. {
    5.     public class CDebugView
    6.     {
    7.         [DllImport("kernel32.dll", CharSet = CharSet.Auto)]
    8.         private static extern void OutputDebugString(string message);

    9.         public static void WriteDebugInfo(string strMsg)
    10.         {
    11.             StringBuilder sb = new StringBuilder();
    12.             sb.AppendFormat("[Tls3DVision] {0}",strMsg);
    13.             OutputDebugString(sb.ToString());
    14.             sb.Clear();
    15.         }
    16.     }
    17. }
    复制代码

    新建上面的.cs文件后然后再需要使用的地方引入下命名空间VisionDebug即可(using VisionDebug;)
    然后调用:
    1. CDebugView.WriteDebugInfo(" This is test code");
    复制代码

    编译软件,记住不要在VS里面调试运行看效果,因为VS已经拦截了调试信息显示到自己的输出里面了,要单独点击exe运行查看!

    转载自:https://www.cnblogs.com/hbccdf/p/csharp_debug_induction.html

    发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

    如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题前面加上【已解决】

    回报帮助你解决问题的坛友,右下角【免费评分】赠与对方视觉币和热心值,伸手党遭人唾弃,做一个热心并受欢迎的人!

    您需要登录后才可以回帖 会员登录 | 会员注册

    本版积分规则

    经营性网站备案信息 经营性网站
    备案信息

    中国互联网举报中心 中国互联网
    举报中心

    中国文明网传播文明 中国文明网
    传播文明

    诚信网站

    深圳市市场监督管理局企业主体身份公示 工商网监
    电子标识