使用PE信息查看工具和Beyond Compare文件比较工具排查dll文件版本不对的问题

news/2024/7/16 1:49:55

目录

1、问题说明

2、修改了代码,但安装版本还是有问题

3、使用PE信息查看工具查看音视频库文件(二进制)的时间戳

4、使用Beyond Compare比较两个库文件的差异

5、找到原因

6、最后


C++软件异常排查从入门到精通系列教程(专栏文章列表,欢迎订阅,持续更新...)icon-default.png?t=N7T8https://blog.csdn.net/chenlycly/article/details/125529931C/C++基础与进阶(专栏文章,持续更新中...)icon-default.png?t=N7T8https://blog.csdn.net/chenlycly/category_11931267.htmlVC++常用功能开发汇总(专栏文章列表,欢迎订阅,持续更新...)icon-default.png?t=N7T8https://blog.csdn.net/chenlycly/article/details/124272585C++软件分析工具从入门到精通案例集锦(专栏文章,持续更新中...)icon-default.png?t=N7T8https://blog.csdn.net/chenlycly/article/details/131405795开源组件及数据库技术(专栏文章,持续更新中...)icon-default.png?t=N7T8https://blog.csdn.net/chenlycly/category_12458859.html网络编程与网络问题分享(专栏文章,持续更新中...)icon-default.png?t=N7T8https://blog.csdn.net/chenlycly/category_2276111.html       最近在项目中使用了PE信息查看工具和Beyond Compare文件比较工具排查了一个dll库文件版本不对的问题,正好借此案例,给大家介绍一下这两个小工具的使用。

1、问题说明

       某天测试人员在一台Win7电脑上测试客户端软件时,发现软件在SIP协议下入会后看不到视频,于是找到音视频模块的同事来排查。通过查看打印得知,是在使用D3D绘制视频图像时绘图接口返回失败,所以视频图像没有绘制上去。于是修改了一下代码,在D3D绘图失败时,自动切换到其他模式。

2、修改了代码,但安装版本还是有问题

       维护音视频模块的小伙,修改了一下代码,本地临时编译了一个Release版本的dll库,发给测试同事,让其验证一下还有没有问题。如果没问题,就走发布流程,提交代码然后编译代码,然后将生成的.lib和.dll发布到产品代码流上来。

       测试同事用临时库验证了一下,入会后可以看视频了,所以修改的代码是有效的。音视频模块的同事提交代码,并发起编译让编译机编译版本,编译完成后将库发布过来。然后我们这边再编译代码,重新打程序的安装包,然后让测试同事安装新的安装包程序。测试同事安装新的安装包后,发现入会后还是看不到视频,还是有问题。


       在这里,给大家重点推荐一下我的几个热门畅销专栏:

专栏1:(该专栏订阅量接近350个,有很强的实战参考价值,广受好评!专栏文章持续更新中,预计更新到200篇以上!)

C++软件调试与异常排查从入门到精通系列文章汇总icon-default.png?t=N7T8https://blog.csdn.net/chenlycly/article/details/125529931

本专栏根据近几年C++软件异常排查的项目实践,系统地总结了引发C++软件异常的常见原因以及排查C++软件异常的常用思路与方法,详细讲述了C++软件的调试方法与手段,以图文并茂的方式给出具体的实战问题分析实例,带领大家逐步掌握C++软件调试与异常排查的相关技术,适合基础进阶和想做技术提升的相关C++开发人员!

专栏中的文章均是通过项目实战总结出来的(通过项目实战积累了大量的异常排查素材和案例),有很强的实战参考价值!专栏文章还在持续更新中,预计文章篇数能更新到200篇以上!

专栏2: 

C/C++基础与进阶(专栏文章,持续更新中...)icon-default.png?t=N7T8https://blog.csdn.net/chenlycly/category_11931267.html

以多年的开发实战为基础,总结并讲解一些的C/C++基础与进阶内容,以图文并茂的方式对相关知识点进行详细地展开与阐述!专栏涉及了C/C++领域的多个方面的内容,同时给出C/C++及网络方面的常见笔试面试题,并详细讲述Visual Studio常用调试手段与技巧!

专栏3: 

开源组件及数据库技术icon-default.png?t=N7T8https://blog.csdn.net/chenlycly/category_12458859.html

以多年的开发实战为基础,分享一些开源组件及数据库技术! 


3、使用PE信息查看工具查看音视频库文件(二进制)的时间戳

       难道发布的库的版本有问题?于是先用PE工具打开mediasdk.dll二进制文件,查看二进制文件的时间戳(编译生成时间),如下所示:

文件的修改时间为:2023/12/08 13:26:52,确实就是这个时间点编译的,所以从二进制文件的编译生成时间上看是没问题的。

注意,不能把电脑中文件的修改时间当成二进制文件的生成时间,文件修改时间仅仅表示在本机器上操作的时间,应该使用专用的PE信息查看工具去查看文件生成时的时间戳。

       这个地方说一下PE查看工具PeViewerMiTeC EXE Explorer

我这边之前使用的PE信息查看工具叫PeViewer,以前排查问题时,用该工具打开64位二进制文件发生了闪退。后来在网上搜到了MiTeC EXE Explorer工具,这个工具兼容性比较好,打开64位二进制文件没有问题。

4、使用Beyond Compare比较两个库文件的差异

       既然时间对的上,为啥之前验证时没问题,使用新版本的安装包安装后的软件还有问题呢?于是让测试同事使用Beyond Compare软件比较一下音视频开发同事给的mediasdk.dll和新版本安装目录中的mediasdk.dll文件,看看二者有没有区别。

       对于Beyond Compare,默认是Text Compare模式,需要切换到Hex Compare二进制比较模式。具体切换入口为:

在菜单栏中点击Session,然后在弹出的菜单中点击Compare in New View Using,然后在弹出的子菜单中点击Hex Compare,这样就切换到二进制内容比较模式了,如下所示:

       比较了一下两个mediasdk.dll文件,确实有很多不同的地方:

但最近两天没修改该模块的代码,两个应该不会有差异的,所以还是mediasdk.dll库的版本不对。

5、找到原因

       目前处理这个问题的音视频开发同事是刚毕业没多久的新人,可能相关代码环境还是不熟悉,是不是只修改了每日流,没有修改封闭流?我们当前产品就要发布了,使用的是音视频模块的封闭流版本,很有可能是没修改封闭流导致的。于是亲自到这个新同事的机器上看了一下,确实是只修改了每日流,没修改封闭流的代码。修改一下,重新发布就可以了。

6、最后

       本文通过项目中遇到的库文件版本问题,介绍了PE信息查看工具PeViewer和MiTeC EXE Explorer,以及文件比较工具Beyond Compare。这些小工具虽然比较小,但在日常工作中还是挺有用的,所以在这里给大家分享一下。


http://lihuaxi.xjx100.cn/news/1908025.html

相关文章

Flink 状态管理与容错机制(CheckPoint SavePoint)的关系

一、什么是状态 无状态计算的例子: 例如一个加法算子,第一次输入235那么以后我多次数据23的时候得到的结果都是5。得出的结论就是,相同的输入都会得到相同的结果,与次数无关。 有状态计算的例子: 访问量的统计&#x…

cmakelists.txt中install函数/命令

原文链接install — CMake 3.28.1 Documentation install Contents install Synopsis Introduction Signatures Examples Example: Install Targets with Per-Artifact Components Example: Install Targets to Per-Config Destinations Generated Installation Script …

git 杂项

----------------------------------------------------------- 1. Failed to connect to github.com port 443 连接超时 ----------------------------------------------------------- $ git config --global --https.sslVerify "false" 它会在全局配置文件中, 通常…

【MIKE】MIKE河网编辑器操作说明

目录 MIKE河网编辑器说明河网定义河网编辑工具栏河网文件(.nwk11)输入步骤1. 从传统的地图引入底图1.1 底图准备1.2 引入河网底图1.3 输入各河段信息2. 从ARCView .shp文件引入底图MIKE河网编辑器说明 河网编辑器主要功能有两个: ①河网的编辑和参数输人,包括数字化河网及…

【python笔记】并发编程

前言 菜某的笔记总结分享。有错误请指正。 并发编程的意义 并发编程是用来提升代码执行的效率的。 名词理解 进程和线程 我们可以这样理解进程和线程。进程是一个工厂,线程是工厂里的一条流水线。 我们要让我们产品的生产效率提高,我们可以多开工…

[node]Node.js 中REPL简单介绍

[node]Node.js 中REPL简单介绍 什么是REPL为什么使用REPL如何使用REPL 命令REPL模式node的全局内容展示node全局所有模块查看全局模块具体内容其它命令 实践 什么是REPL Node.js REPL(Read Eval Print Loop:交互式解释器) 表示电脑的环境,类似 Windows 系统的终端或…

[网络安全]用户与组管理

一: 用户管理 1. 每个用户拥有不同的操作权限 2. 每个用户拥有唯一一个SID(安全标识符) 用户SID : whoami /user 所有SID: whoami /all 给账户赋权限 实质是给 SID赋权限 用户UID : 500Windows的administrator 的UID 从500开始普通用户从 1000开始 3.账户密…

【藏经阁一起读】(81)__《云原生节点管理最佳实践白皮书》

【藏经阁一起读】(81)__《云原生节点管理最佳实践白皮书》 云原生节点管理最佳实践白皮书 作者: 小龙、彭媛洪、陈海 发布时间:2023-11-15 章节数:25 一、云原生节点管理模式产生背景 随着云计算应用的普及&#xf…