使用Process Monitor工具探测日志文件是程序哪个模块生成的

news2024/11/24 11:56:11

目录

1、问题描述

2、使用Process Monitor监测目标文件是哪个模块生成的思路说明

3、操作Process Monitor监测日志文件是哪个模块生成的

4、通过screenctach.dll库的时间戳,找到其pdb文件,然后去查看详细的函数调用堆栈

5、最后


VC++常用功能开发汇总(专栏文章列表,欢迎订阅,持续更新...)icon-default.png?t=N7T8https://blog.csdn.net/chenlycly/article/details/124272585C++软件异常排查从入门到精通系列教程(专栏文章列表,欢迎订阅,持续更新...)icon-default.png?t=N7T8https://blog.csdn.net/chenlycly/article/details/125529931C++软件分析工具从入门到精通案例集锦(专栏文章,持续更新中...)icon-default.png?t=N7T8https://blog.csdn.net/chenlycly/article/details/131405795C/C++基础与进阶(专栏文章,持续更新中...)icon-default.png?t=N7T8https://blog.csdn.net/chenlycly/category_11931267.html       使用Process Monitor工具可以监测目标程序在运行过程中文件活动,比如创建、读写了哪些文件,可以使用这个监测功能去搞清楚日志文件是哪些模块生成的。今天通过一个实例详细讲述一下使用Process Monitor监测程序文件活动的完整过程。

1、问题描述

       比如在测试软件时,发现软件在运行的过程中会产生一些临时的日志文件,比如有次我们遇到软件会在桌面上产生一个日志文件,明显这是不能容忍的,日志要统一管理,不必要的日志文件都要统统清理掉。

       但我们不知道这些日志文件是哪些模块产生的,询问了底层模块的开发维护组,也没人认领,没法搞清楚这个日志是那个模块产生的,也就无从清理了。后来我们向测试同事推荐Process Monitor工具,通过该工具监测我们软件的文件活动,看看这个文件到底是哪个模块生成的,最后确实找出来了。

       下面列举一个监测文件的实例,以供大家参考。比如我们要监测TestScreenCatch.exe程序中是哪个模块生成了screencatch.log文件:(此处只是范例,此处通过文件名称就能猜出是哪个模块生成的)

2、使用Process Monitor监测目标文件是哪个模块生成的思路说明

       可以先将程序关闭,然后将日志文件screencatch.log删除掉,然后使用Process Monitor监控该程序,监控该文件是什么创建出来的。然后Process Monitor监测到了对该文件的操作活动,然后以screencatch.log名称在活动记录中搜索,然后找出调用CreateFile创建文件的记录,然后双击该记录,查看相关的函数调用堆栈。同过函数调用堆栈,就能确定是程序的哪个模块生成的,甚至还能看到是哪个函数创建了该文件。

3、操作Process Monitor监测日志文件是哪个模块生成的

       先启动Process Monitor工具,将要监测的进程设置为TestScrrenCatch.exe:

开启监测。

       重新运行TestScrrenCatch.exe程序,有代码向screencatch.log文件中写日志,然后停止Process Monitor的监测。然后按下Ctrl+F快捷键,调出搜索窗口,输入screencatch.log关键字进行搜索,找到操作screencatch.log文件的记录,双击记录,打开记录的详情页面:

切换到stack标签页,查看当前操作所在线程的函数调用堆栈:

最上面系统库的接口,调用堆栈向下拉动一下,找到调用fopen或者WriteFile接口,再向下就看到具体业务模块的接口了:

发现是screenctach.dll库的相关接口中向screencatch.log文件写入内容的。但因为缺乏pdb文件,无法看到具体的接口。

4、通过screenctach.dll库的时间戳,找到其pdb文件,然后去查看详细的函数调用堆栈

       上面我们知道是screenctach.dll库生成了screencatch.log文件,但因为缺乏pdb文件,函数调用堆栈中看不到具体的函数接口。为了函数调用堆栈中能显示函数接口、所在cpp文件名称及代码行号,我们需要取来screencatch.dll库的pdb符号库文件,Process Monitor加载pdb文件后就能显示这些详细的信息了。

       我们先使用PEViewer工具查看screenctach.dll库的时间戳(生成screenctach.dll库的时间):

然后按照该时间戳到版本服务器上找到screenctach.dll库对应的pdb文件,然后将pdb文件放到screenctach.dll库的同级目录中,再次双击刚才查看的那条记录,Process Monitor会自动从当前目录中去搜索pdb文件,然后自动去加载。因为有了screenctach.dll库的pdb符号,函数调用堆栈中就显示了具体的接口和行号了,如下所示:

这样我们就知道是哪个模块哪句代码操作screencatch.log文件了,就找到生成screencatch.log文件的源头了。

5、最后

       对于即将要发布的正式软件,是不能随意地在某些目录中生成日志文件的,仅需要保留一些关键信息的打印日志。对于包含上百个dll模块的大型软件,可以使用Process Monitor工具高效地定位日志文件出处,快速地解决软件中的一些问题。

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

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

相关文章

C++编程入门与提高:学习策略与技巧

💂 个人网站:【工具大全】【游戏大全】【神级源码资源网】🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 摘要:C是一门…

淘宝商品sku信息抓取接口api

在电商行业中,SKU是一个经常被使用的术语,但是对于很多人来说,这个词可能还比较陌生。在这篇文章中,我们将详细解释什么是SKU,以及在电商业务中它的作用和意义。 什么是SKU? SKU是“Stock Keeping Unit”…

Ubuntu 20.04编译GPMP2过程记录

前言 GPMP2是董靖博士等人在16-17年提出的结合GTSAM因子图框架与Gaussian Processes完成motion planning的一项工作。前身源于Barfoot教授的课题组提出的STEAM(Simultaneous Trajectory Estimation and Mapping)问题及其相关工作。在提出董靖博士提出GPMP2后,borgl…

1400*B. Two Buttons(BFS)

解析&#xff1a; 每次一个点有两种情况&#xff0c;-1 和 *2 两种情况&#xff0c;直接 BFS 即可。 #include<bits/stdc.h> using namespace std; const int N2e55; int n,m,vis[N],cnt[N]; void bfs(){queue<int>q;vis[n]1;q.push(n);while(q.size()){auto tq.f…

使用低代码实现一个表单页面 ------ XinBuilder

平台介绍 如果你不是一个前端开发&#xff0c;但是想要实现出一个前端页面。 那么就可以通过低代码的方式&#xff0c;拖拽和配置出你想要的页面。 而XinBuilder就是简单的一套低代码平台&#xff0c;你可以在上面拖拽出自己想要使用的组件并进行配置。使用方式也很简单。 这…

13. ShardingSphere-Proxy 数据库代理

Spring Cloud 微服务系列文章&#xff0c;点击上方合集↑ 1. 简介 ShardingSphere-Proxy是ShardingSphere分布式数据库中间件的一部分&#xff0c;它提供了数据库代理功能。通过引入ShardingSphere-Proxy&#xff0c;可以在无需改动应用程序代码的情况下&#xff0c;实现分库…

什么是商业智能(BI),就看这篇文章足够了

01、什么是商业智能BI&#xff1f; 商业智能BI - 派可数据商业智能BI可视化分析平台 首先要了解什么是商业智能BI&#xff08; Business Intelligence &#xff09;&#xff1f;百度商业智能BI有很多很多官方的定义&#xff0c;各种解释&#xff0c;实际上从这么多年的经验出发…

AI 大模型

随着人工智能技术的迅猛发展&#xff0c;AI 大模型逐渐成为推动人工智能领域提升的关键因素&#xff0c;大模型已成为了引领技术浪潮研究和应用方向。大模型即大规模预训练模型&#xff0c;通常是指那些在大规模数据上进行了预训练的具有庞大规模和复杂结构的人工智能模型&…

【2023款奔驰改款E260 L运动型:豪华与性能的完美结合】

在汽车市场中&#xff0c;奔驰一直以其卓越的品质和卓越的性能赢得了消费者的喜爱。而2023款奔驰改款E260 L运动型&#xff0c;更是将豪华与性能完美结合&#xff0c;让人无法抗拒。首先&#xff0c;让我们来看一下这款车的外观设计。新款E260 L运动型的前脸设计更加犀利&#…

css 语法笔记

.abc {margin-left:20px; } .xyz {margin-left:20px; } 等同于 .abc, .xyz {margin-left: 20px; } 参考 CSS - 选择器_css最后一个元素选择器_伏城之外的博客-CSDN博客 CSS Selectors Reference

ElasticSearch - 基于 DSL 、JavaRestClient 实现数据聚合

目录 一、数据聚合 1.1、基本概念 1.1.1、聚合分类 1.1.2、特点 1.2、DSL 实现 Bucket 聚合 1.2.1、Bucket 聚合基础语法 1.2.2、Bucket 聚合结果排序 1.2.3、Bucket 聚合限定范围 1.3、DSL 实现 Metrics 聚合 1.4、基于 JavaRestClient 实现聚合 1.4.1、组装请求 1…

基于知识蒸馏的夜间低照度图像增强及目标检测

源自&#xff1a;应用光学 作者&#xff1a;苗德邻, 刘磊, 莫涌超, 胡朝龙, 张益军, 钱芸生. “人工智能技术与咨询” 发布 摘 要 为了实现夜间低照度图像的增强&#xff0c;提高目标检测模型在夜间低照度条件下的检测精度并减小模型的计算成本&#xff0c;提出了一种基…

NLP 项目:维基百科文章爬虫和分类 - 语料库阅读器

塞巴斯蒂安 一、说明 自然语言处理是机器学习和人工智能的一个迷人领域。这篇博客文章启动了一个具体的 NLP 项目&#xff0c;涉及使用维基百科文章进行聚类、分类和知识提取。灵感和一般方法源自《Applied Text Analysis with Python》一书。 在接下来的文章中&#xff0c;我将…

c++堆排序-建堆-插入-删除-排序

本文以大根堆为例&#xff0c;用数组实现&#xff0c;它的nums[0]是数组最大值。 时间复杂度分析&#xff1a; 建堆o(n) 插入删除o(logn) 堆排序O(nlogn) 首先上代码 #include<bits/stdc.h>using namespace std; void down(vector<int>&nums, int idx, i…

ThreeJS-3D教学四-光源

three模拟的真实3D环境&#xff0c;一个非常炫酷的功能便是对光源的操控&#xff0c;之前教学一中已经简单的描述了多种光源&#xff0c;这次咱们就详细的讲下一些最常见的光源&#xff1a; AmbientLight 该灯光在全局范围内平等地照亮场景中的所有对象。 该灯光不能用于投射阴…

【CAN信号解析】使用python-can/cantools解析CAN数据

文章目录 1. 如何解析CAN消息1.1 简介1.2 python-can库使用2. python-can库介绍2.1 完整解析流程2.2 简单示例3. 总结与坑4. 代码示例1. 解析一个DBC2. 生成一个DBC3. 解析.asc数据 保存为.csv格式1. 如何解析CAN消息 关于CAN的基础知识,可阅读如下链接: CAN协议详解CAN消息…

作为SiteGPT替代品,HelpLook的优势是什么?

在当今快节奏的数字化世界中&#xff0c;企业不断寻求创新方式来简化运营并增强客户体验。由于聊天机器人能够自动化任务、提供快速响应并提供个性化互动&#xff0c;它们在业务运营中的使用变得非常重要。因此&#xff0c;企业越来越意识到像SiteGPT和HelpLook这样高效的聊天机…

分享5个自动生成PPT的网站

1、Mindshow 之前公众号里分享过这款做PPT的AI工具&#xff0c;这次再拿出来分享一次。 没别的原因&#xff0c;确实好用。 而且也是目前能够和ChatGPT结合使用最好的PPT工具之一。 直接在ChatGPT生成PPT内容&#xff0c;转成Markdown格式复制进来一键排版&#xff0c;一份P…

MySQL ——多表连接查询

一、&#xff08;左、右和全&#xff09;连接概念 内连接&#xff1a; 假设A和B表进行连接&#xff0c;使用内连接的话&#xff0c;凡是A表和B表能够匹配上的记录查询出来。A和B两张表没有主付之分&#xff0c;两张表是平等的。 关键字&#xff1a;inner join on 语句&#xf…

更好用的的MybatisPlus:MybatisFlex(上)

更好用的的MybatisPlus&#xff1a;MybatisFlex&#xff08;上&#xff09; 前言 Mybatis 是我们常用的一个 ORM 框架&#xff0c;而 MybatisPlus &#xff08;以下简称 MP&#xff09; 则是对 Mybatis 进行了一层封装&#xff0c;便捷了我们的开发工作&#xff0c;但是由于其…