Halcon机器视觉论坛

 找回密码
 会员注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 223|回复: 1
收起左侧

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

[复制链接]
  • TA的每日心情
    开心
    3 天前
  • 签到天数: 435 天

    连续签到: 3 天

    [LV.9]以坛为家II

    105

    主题

    512

    帖子

    2780

    积分

    Rank: 9

    积分
    2780

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

    发表于 2019-6-14 21:07:26 | 显示全部楼层 |阅读模式

    管理员 |主题 105|帖子 512|积分 2780

    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

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

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

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

  • TA的每日心情
    窃喜
    2019-7-2 19:24
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    0

    主题

    4

    帖子

    7

    积分

    Rank: 1

    积分
    7
    发表于 2019-7-2 19:32:31 | 显示全部楼层

    试用员工 |主题 0|帖子 4|积分 7

    好方法,学习了

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

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

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

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

    本版积分规则

    51Halcon会员技术交流会员技术交流 | 51Halcon官方客服咨询官方客服咨询 | Halcon切换助手使用反馈切换助手使用反馈 | 51Halcon论坛管理团队论坛管理团队

    申请友链| 小黑屋| 手机版| Archiver| Halcon机器视觉论坛  

    粤ICP备15095995号-2 粤公网安备44030602000670号

    Powered by Discuz! X3.4 Licensed© 2015-2019 Comsenz Inc.

    快速回复 返回顶部 返回列表