DebugView的使用

news2024/10/7 18:29:46

目录

  • 一、前言
  • 二、本机调试
    • 1.DebugView程序文件说明
    • 2.OutputDebugString函数使用
    • 3.示例程序
    • 4.远程调试
  • 三、问题与注意事项
  • 四、小结

一、前言

         DebugView是windows下的一款调试工具,可以捕获程序输出的日志,分为64位和32位,支持应用层和内核层的日志捕获,利用它排除bug是个不错的选择。本文主要关注应用层面的使用。
         一般程序日志记录可以输出到文件进行查看,但是使用DebugView不会自动输出到文件,它的日志信息是驻留在进程内存中。

二、本机调试

1.DebugView程序文件说明

    ![在这里插入图片描述](https://img-blog.csdnimg.cn/8322c46457a444ab9edd8e24a43f9702.png)
      Dbgview.chm: 帮助文档
      Dbgview.exe:捕获32位进程的日志输出
      Dbgview64.exe/Dbgview64a.exe: 捕获64位进程的日志输出,有平台相关性
      
      DebugView主界面
      ![在这里插入图片描述](https://img-blog.csdnimg.cn/d70733a3427b48c1b355859f50d48501.png)

2.OutputDebugString函数使用

      OutputDebugString是一个Windows Api函数,可以在应用程序中使用。它的作用是发送日志,而DebugView是接收日志,。捕获的时候需要提前启动DebugView,当然不启动DebugView的话应用程序也不会因此而崩溃。
      它的ANSI和UNICODE版本签名为
WINBASEAPI VOID WINAPI OutputDebugStringA(_In_opt_ LPCSTR lpOutputString);

WINBASEAPI VOID WINAPI OutputDebugStringW(_In_opt_ LPCWSTR lpOutputString);

在C#中调用该方法

[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
public static extern void OutputDebugString(string message);

System.Diagnostics.Trace.WriteLine也可以实现和OutputDebugString类似的效果

3.示例程序

测试代码如下

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;

namespace DebugViewTest
{
    class Program
    {
        [DllImport("kernel32.dll", CharSet = CharSet.Auto)]
        public static extern void OutputDebugString(string message);

        static void Main(string[] args)
        {
            Console.WriteLine("BEGIN");
            for (int i = 0; i < 10; i++)
            {
                OutputDebugString("debugstring");
                System.Diagnostics.Trace.WriteLine("tracestring");
            }
            Console.WriteLine("END");
            
        }
    }
}

运行测试程序,查看DebugView的日志列表
DebugView会默认连接到 本机local
在这里插入图片描述
在C#中调用时不管编译的是Debug还是Release都是能正常捕获的

4.远程调试

远程调试需要在本地和远程机器上都启动DebugView进程
远程机器作为接收请求的一端,需要在命令行下加参数启动 ,即 dbgview /a
在这里插入图片描述
可以使用 tasklist /fi “imagename eq dbgview.exe” 命令得到dbgview的进程id
再结合 netstat -ano | find 命令找到dbgview监听的端口
在这里插入图片描述
如图所示,dbgview默认监听2020端口

本机作为请求的一端,可以通过菜单栏的 “Connect” 按钮连接到远程的DebugView
需要先断开到本地的默认连接
在这里插入图片描述
在这里插入图片描述

三、问题与注意事项

1.服务进程监控
DebugView默认捕获应用层普通的win32应用程序,菜单栏默认 勾选 “Capture Win32”
如果被监控进程是以windows服务形式存在的,那么需要使用管理员权限启动DebugView进程
然后在DebugView菜单栏勾选 “Capture Global Win32”
在这里插入图片描述
勾选 "Capture Kernel"会对内核的日志输出进行捕获
2.一些服务器防火墙开启的情况下,需要对dbgview监听的端口进行放行

四、小结

    工欲善其事必先利其器,所以选择一个合适的工具是多么的重要。debugview不仅能够监控本地进程日志输出还能够监控远程进程的日志输出,还是很有实用性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/621897.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

chatgpt赋能python:Python开发手机软件的优势和挑战

Python开发手机软件的优势和挑战 随着智能手机的普及&#xff0c;移动应用开发已成为当前最热门的技术领域之一。随着越来越多的企业意识到移动应用的重要性&#xff0c;越来越多的开发者开始加入这个领域。 在移动应用的开发中&#xff0c;由于其高效性和易于学习的特点&…

【Flutter】Dart/Flutter SDK如何降低版本、回退到指定版本

因为dart3.0以后不再支持 no-sound-null-safety&#xff1b;但是有些项目不得以切换到dart3.0以前继续使用运行项目 方法1&#xff1a; 通过 $ flutter downgrade命令&#xff0c;将flutter降级为当前通道的上一个活动版本&#xff1b; 如果没有存在老版本则会提示 flutter …

从零手写操作系统之RVOS软件定时器实现-08

从零手写操作系统之RVOS软件定时器实现-08 定时器分类软件定时器的分类软件定时器设计与实现软件定时器调用流程增加对周期性定时任务支持测试优化点 本系列参考: 学习开发一个RISC-V上的操作系统 - 汪辰 - 2021春 整理而来&#xff0c;主要作为xv6操作系统学习的一个前置基础。…

chatgpt赋能python:Python强制等待:如何优化你的Python技能

Python强制等待&#xff1a;如何优化你的Python技能 在Python编程中&#xff0c;强制等待是一种非常重要的程序设计方式。Python代码中的强制等待通常使用time.sleep()方法实现。在本文中&#xff0c;我们将详细介绍什么是Python强制等待&#xff0c;以及如何使用它来优化你的…

基于最近电平逼近的开环MMC逆变器MATLAB仿真模型

资源地址&#xff1a; 模型介绍&#xff1a; MATLAB21b版本 DC:12kV&#xff0c;N&#xff1d;12&#xff0c; 采用最近电平逼近调制&#xff0c;采用基于排序的均压方法&#xff0c;冒泡排序&#xff0b;桥臂电流方向判断。 连接负载&#xff0c;可以得到13电平相电压波形。…

Windows10下使用VS2019编译chromium

Windows10下使用VS2019编译chromium 工具设置代理cmd运行gclient配置VS的版本,环境变量设置下载源码生成编译工具 下载depot_tools,并配置环境变量,PATH下添加depot_tools的解压路径E:\src\depot_tools 设置代理 控制台管理员权限执行 git config --global http.proxy…

CenoOS连接 SQL Server

目录 1、问题&#xff1a;2、解决步骤3、拓展3.1 常用查询3.2 SQL Server 语句规则3.3 python调用 1、问题&#xff1a; 连接&#xff1a;ProviderSQLOLEDB.1;Persist Security InfoFalse;User IDXXX;passwordXXXXX;Initial CatalogXXXXX;Data SourceXXXXX; 解析&#xff1a;…

chatgpt赋能python:Python屏幕截图:完美的方法记录你的屏幕

Python屏幕截图&#xff1a;完美的方法记录你的屏幕 Python作为一种高级编程语言&#xff0c;被广泛用于开发各种应用程序和游戏&#xff0c;其中之一就是屏幕截图。 在本文中&#xff0c;我们将介绍使用Python进行屏幕截图的方法和技巧。 什么是屏幕截图&#xff1f; 屏幕截…

第六十八天学习记录:高等数学:导数(宋浩板书)

导数是微积分中的一个概念&#xff0c;描述了函数在某一个点上的变化率。具体地说&#xff0c;函数 f ( x ) f(x) f(x)在 x a xa xa处的导数为 f ′ ( a ) f(a) f′(a)&#xff0c;表示当 x x x在 a a a处发生微小的变化 Δ x \Delta x Δx时&#xff0c; f ( x ) f(x) f(x)对…

Golang每日一练(leetDay0090) 运算优先级、有效字母异位词

目录 241. 为运算表达式设计优先级 Different Ways to Add Parentheses &#x1f31f;&#x1f31f; 242. 有效的字母异位词 Valid Anagram &#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Rust每日一练 专栏 Golang每日一练 专栏 Python每日一练 专栏 …

Vector源码

介绍 Vector是矢量队列&#xff0c;继承于AbstractList&#xff0c;实现了List, RandomAccess, Cloneable和Serializable接口Vector继承了AbstractList&#xff0c;实现了List接口&#xff0c;所以它是一个队列&#xff0c;支持相关的添加、删除、修改、遍历等功能Vector实现了…

chatgpt赋能python:Python的强制语句缩进解析

Python的强制语句缩进解析 什么是语句缩进 在其他编程语言中&#xff0c;我们通过使用花括号或者一些其他的符号来区分控制语句的范围。但在Python中&#xff0c;我们使用缩进来实现这个目的。这意味着任何控制结构的主体都必须按照要求正确缩进。 为什么Python强制要求使用…

【Java】JavaWEB核心要点总结:63

文章目录 1. JSP 和 Servlet 有什么区别2. JSP有哪些内置对象 分别是什么3. 详细讲解cookie session token4. 如果客户端禁止 了cookie &#xff0c;session 还能用吗5. session 的工作原理 1. JSP 和 Servlet 有什么区别 JSP&#xff08;Java Server Pages&#xff09;和Servl…

读改变未来的九大算法笔记06_图形识别

1. 人工智能研究人员在过去几十年中学到的最重要的教训之一 1.1. 看似智能的行为有可能从看似随机的系统中浮现出来 1.2. 如果我们有能力进入人脑&#xff0c;研究神经元之间连接的强度&#xff0c;其中绝大部分连接都会表现得很随机 1.3. 当作为集合体行动时&#xff0c;这…

javaScript蓝桥杯-----全球新冠疫情数据统计

目录 一、介绍二、准备三、⽬标四、代码五、完成 一、介绍 新冠疫情席卷全球&#xff0c;在此期间有很多免费的 API 和⽹站为⼈们提供了各个国家疫情数据的查询功能&#xff0c;这些免费公开的数据体现出了互联⽹作为信息媒介的优越性&#xff0c;帮助全球⼈⺠更好的了解⼀线疫…

电路模型和电路定律(3)——“电路分析”

小雅兰期末加油冲冲冲&#xff01;&#xff01;&#xff01; 复习之前的内容&#xff1a; 这样的连接方式是不可以的&#xff1a; 两个电压源&#xff0c;电压值不相同&#xff0c;是不能并联的 两个电流源&#xff0c;电流值不相同&#xff0c;是不能串联的 电流源也不能开…

浅谈Zuul、Gateway

一、Zuul Zuul是通过Servlet来实现的&#xff0c;Zuul通过自定义的ZuulServlet&#xff08;类似于Spring MVC的DispatcherServlet&#xff09;来对请求进行控制(一系列过滤器处理Http请求)。 所有的Request都要经过ZuulServlet的处理&#xff0c;三个核心的方法preRoute(),rou…

时钟频率的配置-DG32

时钟频率的配置-DG32 HXTAL&#xff1a;高速外部时钟&#xff0c;4到32MHz的外部振荡器&#xff0c;可为系统提供精确的主时钟。带有特定频率的晶体必须靠近两个HXTAL的引脚。和晶体连接的外部电阻和电容必须根据所选择的振荡器来调整&#xff1b; LXTAL&#xff1a;低速外部…

chatgpt赋能python:Python开发桌面应用全面介绍

Python开发桌面应用全面介绍 Python是一种非常万能的编程语言&#xff0c;也逐步发展成为一种适用于开发各种桌面应用程序的语言。Python开发桌面应用的优点是它可以快速开发&#xff0c;易于阅读和使用&#xff0c;同时具有很高的可扩展性和可维护性&#xff0c;因此越来越多…

chatgpt赋能python:Python开立方:简单快捷的计算方法

Python开立方&#xff1a;简单快捷的计算方法 如果你是一位程序员或者是一个正在学习编程的初学者&#xff0c;那么你一定会用到Python这个编程语言。Python作为一门多用途的编程语言&#xff0c;它有着简单易学、高效快捷、优雅简洁等优点。同时&#xff0c;在数据分析、人工…