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

目录

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://www.mzph.cn/news/237721.shtml

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

相关文章

uniapp中使用封装步骤条组件

针对步骤条封装完终于清清楚楚啦 先看效果&#xff1a; 附上代码&#xff1a;使用可直接复用&#xff1a;数据是写在了当前组件中&#xff0c;如有必须&#xff0c;可以使用其中的props传值stepInfos传递相应的数据&#xff0c;根据steps步数就可以控制走到哪一步啦 <temp…

vue3+vite+ts父子组件之间的传值

vue3vitets父子组件之间的传值 前言一、父组件向子组件传值二、子组件向父组件传值三、非父子组件传值&#xff0c;也就是任意两个组件的传值&#xff0c;和vue2基本相似&#xff0c;这里就不描述了&#xff0c;vue3里面建议大家使用pinia来进行传值。 前言 提示&#xff1a;这…

laravel框架引用kafka

在 Laravel 中操作 Kafka&#xff0c;可以使用 php-rdkafka 扩展或 confluent-kafka-php 扩展。 以下展示如何使用 confluent-kafka-php 扩展来在 Laravel 中使用 Kafka。 操作步骤说明&#xff1a; 1、安装 confluent-kafka-php 扩展。您可以使用 Composer 进行安装&#x…

SpaceDesk如何连接平板/PC(生产力副屏)

1、下载安装 分为安卓端和PC端&#xff0c;两个设备都需要安装对应的软件。 SpaceDesk官网 https://link.zhihu.com/?targethttp%3A//spacedesk.net/ 需要魔法上网。安装过程比较简单&#xff0c;无脑下一步即可。 我已经把安装包准备好了&#xff0c;如果不想自己找&#…

Linux互斥锁pthread_mutex_lock和pthread_mutex_unlock

当一个进程中存在两个及以上的线程时&#xff0c;线程间会互相争夺共享资源&#xff0c;导致单个线程中的执行秩序会被打乱。所以需要用到互斥锁来进行秩序控制&#xff0c;保证单个线程中的程序先执行完毕。 2、创建互斥锁pthread_mutex_init(); int pthread_mutex_init(pth…

k8s之共享存储pvpvc

目录 1.1 存储资源管理 1.2 持久卷pv的类型 1.3 实验mysql基于NFS共享存储实现持久化存储 1.3.1 安装NFS 1.3.2 PV参数详解 1.3.3 创建pv 1.3.4 mysql使用pvc持久卷 1.4 动态绑定pv 1.4.1 配置nfs-provisioner授权 1.4.2 部署nfs-client-provisioner 1.4.3 创建Stor…

35. 常用shell之 df - 磁盘空间使用情况 的用法及衍生用法

df&#xff08;disk free&#xff09;是一个在大多数类 Unix 系统上可用的命令行工具&#xff0c;用于显示文件系统的磁盘空间使用情况。 基本用法 显示所有文件系统的磁盘使用情况: df 这个命令会列出所有挂载的文件系统及其磁盘使用情况。 以人类可读的格式显示信息: df -…

CentOS7 安装 DockerCompose

目录 一、安装Docker 二、安装步骤 2.1 卸载 2.2 安装docker 2.3 启动docker 2.4 配置镜像加速器 一、安装Docker Docker 分为 CE 和 EE 两大版本。 CE 即社区版(免费&#xff0c;支持周期7个月)EE 即企业版强调安全&#xff0c;付费使用&#xff0c;支持周期 24 个月…

Altium Designer切换中文界面与英文界面的方法图文教程及视频演示

目录 视频演示1&#xff0c;概述2&#xff0c;汉化切换为中文界面3&#xff0c;切换为英文界面4&#xff0c;总结 视频演示 Altium Designer软件汉化方法 欢迎点击浏览更多高清视频演示 1&#xff0c;概述 Altium Designer支持汉化界面&#xff0c;本文演示Altium Designer软件…

中奖记录设计(策略+模板)

背景 最近需求要做一个活动需求,用户只要参与活动就可以获得奖励,奖励分为以下几种: 创角奖励: 用户在活动内的游戏创建角色即可中奖 等级奖励: 角色在游戏内级别达到某一个级别即可中奖 VIP级别奖励: 角色在游戏内VIP级别达到某一个级别即可中奖 排行榜奖励: 角色某一天充值榜…

Qt+Vs踩坑之QString转std::string中文乱码

文章目录 1.Qt内部的编码造成的中文乱码2.QString与std::string之间转换造成的中文乱码3.QString、string、char*之间的转换4.参考文献 Qt中字符串存在两种中文乱码的情况&#xff1a;1.Qt内部的编码造成的中文乱码&#xff1b;2.QString与std::string之间转换造成的中文乱码。…

nodejs连接mongodb报错SyntaxError: Unexpected token .

nodejs连接mongodb报错SyntaxError: Unexpected token 如下图 经过排查&#xff0c;原因是npm默认安装的mongodb插件是最新版6.3.0 &#xff0c;而mongodb数据库版本是4.0.0 &#xff0c;两者版本不同导致nodejs报错。 解决方法是npm卸载新版本的mongodb插件&#xff0c;再安…

【Java探索之旅】我与Java的初相识(二):程序结构与运行关系和JDK,JRE,JVM的关系

&#x1f3a5; 屿小夏 &#xff1a; 个人主页 &#x1f525;个人专栏 &#xff1a; Java入门到精通 &#x1f304; 莫道桑榆晚&#xff0c;为霞尚满天&#xff01; 文章目录 &#x1f4d1;前言一. 第一个Java程序1.1 main方法1.2 Java的程序结构 二. Java程序的运行三. JDK、JR…

【YOLOV8追踪篇】使用Ultralytics YOLO进行物体追踪

YOLOV8追踪 目录 一 使用已训练的检测模型进行追踪 二 其他 视频分析领域的物体追踪是一项关键的任务,既能够标识出帧内物体的位置和类别,还能在视频进行的过程中为每个检测到的物体保持一个唯一的ID(追踪)。 Ultralytics YOLOv8相关介绍:

Achronix提供由FPGA赋能的智能网卡(SmartNIC)解决方案来打破智能网络性能极限

作者&#xff1a;Achronix 随着人工智能/机器学习&#xff08;AI/ML&#xff09;和其他复杂的、以数据为中心的工作负载被广泛部署&#xff0c;市场对高性能计算的需求持续飙升&#xff0c;对高性能网络的需求也呈指数级增长。高性能计算曾经是超级计算机这样一个孤立的领域&a…

20 Vue3中使用v-for遍历普通数组

概述 使用v-for遍历普通数组在真实开发中还是比较常见的。 基本用法 我们创建src/components/Demo20.vue&#xff0c;代码如下&#xff1a; <script setup> const tags ["JavaScript", "Vue3", "前端"] </script> <template…

301_C++_字符串解析函数‘strcasestr‘

if ((pctmpA = strcasestr(const_cast<char *>(pcMsg), "MotionAlarm"))&& (pctmpA =

(1)(1.10) SiK Radio v1

文章目录 前言 1 概述 2 连接无线电台 3 参数说明 前言 本文介绍了如何将 3DR Radio v1 连接到飞行控制器。你还应阅读 SiK Radio v2&#xff0c;其中包含更详细的用户指南和功能列表。 1 概述 3DR 无线电设备是在自动驾驶仪和地面站之间建立遥测连接的最简单方法。 3DR…

uniapp怎么跳转页面

在 UniApp 中&#xff0c;你可以使用以下方法来跳转到其他页面&#xff1a; 使用<navigator>标签&#xff1a; <navigator url"/pages/example/example">点击跳转</navigator> 在上面的示例中&#xff0c;点击"点击跳转"会导航到/pag…

Redis高可用性方案:主从复制与哨兵机制详解

大家好&#xff0c;我是升仔 在高可用性数据服务的构建中&#xff0c;Redis扮演着重要的角色。Redis的主从复制和哨兵机制是实现高可用性的关键组件。本文将详细探讨这两种机制的使用场景、配置细节&#xff08;尤其是持久化配置&#xff09;&#xff0c;并讨论相应的异常处理…