Windows下问题定位

news2024/10/5 18:31:00

 1、内存相关知识点;

1)windows下32位进程,用户态为2G内存,内核态也为2G内存;却别于linux操作系统;      

备注:可以通过命令行与管理员权限,启动3G的用户态空间,但是部分内核态的驱动等可能存在问题,需要实际测试。                

两个操作系统的设计为什么会存在1G的差别????

2)物理内存与虚拟内存;保留内存与提交内存的却别与实际影响;        

物理内存: 实际机箱里面插的物理内存条;在满足操作系统运行的条件下,只影响操作系统下面程序运行的速度,不影响程序的功能。          

虚拟内存:从硬盘上面划分的用于物理内存的扩展,对普通程序员影响不大,也可以理解为虚拟内存页;          

保留内存与提交内存:一个32位进程的2G的逻辑内存空间的存在形态。2G内存是一个32位进程可以使用的最大空间,OS层面为了提高内存分配的效率,保留内存用户可以不再关心,如果在window XP下面需要通过该参数确认是否发生了内存碎片,当前vista操作系统后,该问题已经不存在。

3)虚拟内存上涨到2G,一般32位应用程序肯定会出现内存不足而产生崩溃; 备注:Calc.exe的内存当前占用为99.440M,不要给任务管理器中的10M迷惑(提交内存),实际经占用了

 2.内存函数调用:

 3.异常处理流程:

1)windows下进程的运行操作系统提供了完善的异常保护机制 !teb查看某个线程是否添加了异常保护,为了提升异常相应的速度,异常控制块FS放置在Teb的句柄首地址 ExceptionList为异常处理列表,当有异常发生时,windows的处理流程如下 1、线程出现异常时,查询当前进程的调试端口是否打开,如果时直接进行调试状态

2)获取ExceptionList的第一个FS[0]的控制器进行处理异常,如果处理成功则继续运行(如try catch)       也有可能处理完成后,进程退出了,如自动抓取dump功能,直接上在teb上登记了异常处理控制块,写完dump文件后退出了

3)也可以弹出错误框由用户决定是否继续运行,如runtimes error类错误,可以继续运行,如果否则进入下一个异常处理控制块

4)如果所有的控制块都没有处理异常,则进入windows UnhandleExceptionFilter函数控制块进行处理

4.Windbg常用命令:

Windbg:等同于linux下面的GDB,可以直接在客户机器上面远程调试
Version,操作系统版本,异常等崩溃抓取的时间
!peb   进程等相关信息,如属于哪个程序崩溃了,一些环境变量配置是否正确
 !runaway  程序运行的时间,如果太短是否属于已启动就崩溃(配置文件等损坏)
!teb 
Kv, !heap,lmvm等命令,使用windbg的se指令,wt,bm,windbg自带的事件指令
dps  ln(查询最接近的函数符号)

现场崩溃位置查询,找到崩溃的现场整理出崩溃的代码行->进行崩溃代码行分析 
.thread     --线程控制块
dd/!teb  线程控制块地址
.dps   进行栈信息打印    ------打印整个线程的栈信息
.dps  esp  esp + 200进行打印   ---  打印部分栈信息

//将64位操作系统的dump切换为32位操作系统环境
.load wow64exts


!sw
//windows异常问题定位
!findstack kernel32!UnhandleExceptionFilter
!findstack ntdll!KiUserExceptionDispatcher
!findstack ntdll!RtlEnterCriticalSection
!cs


//内存泄露
gflags.exe  /i Excute.exe
set _NT_SYMBOL_PATH=C:\Users\Symbals
umdh.exe -p:12345 > d:\MemorySnap1.txt
umdh.exe -p:12345 > d:\MemorySnap2.txt
umdh.exe -d d:\MemorySnap1.txt d:\MemorySnap2.txt > d:\MemoryCmp.txt

操作:D:\2.学习文件\window下问题定位\测试dump信息\王根岭  
措施: 关闭 New抛异常,当内存不足时,直接返回空指针

5.定位的一般原理与步骤:

1)确认问题属于哪一类,内存泄露、踩内存、死锁、句柄泄露等…………

2)句柄泄露与内存泄露
      采用快照的形式,在进程运行的不同时间段抓取不同的snap,然后比较不同时间段的snap的差异类确认内存泄露的代码位置。 需要开启ust (Create user mode stack trace database)

3)踩内存多线程等相关问题,开启页堆进行问题复现。采用的原理:每个内存页都可以单独设置访问属性,申请的内存高地址4K对齐,同时添加一个4K的隔离页面。这样用户如果操作时,只要写越界,就会触发内存访问错误。这个也就是开启页堆后内存上升很快的原因,同linux下面的vrigrande工具

6.辅助工具:

1)使用procexp查看进程是否异常,内存是否异常,句柄是否泄漏,进程是否死锁,线程是否有泄漏等
2)windbg 查看崩溃时候的dump信息,找到崩溃问题
3)内存泄漏使用umdh进行比较,查询到泄漏的代码行------问题能复现
4)句柄泄漏可以直接使用windbg的!htrace进行跟踪,也可以采用umdh进行定位
5)当出现崩溃或者多线程等难浮现问题。直接搭建环境,进行ApplicationVerifier验证
   (正式的交付件应该都需要该工具测试,但是只需要关注多线程,内存踩踏类问题)
6)使用dbgdiag等工具进行崩溃、内存泄露等相关分析,可以只开启ust开关
7)内存泄露不能复现,只能借助dbgdiag或者windbg Heap命令进行分析,找到哪块大小的内存出现了泄露

备注:
当前讲解Vista,Win7\8类内部实现类文档比较少,原先的一些工具等有的已经不是很好使用,因此建议由XP的机器,可以先在XP下面进行稳定性测试,出现问题也比较好定位,如!address可以直接查看剩余堆块大小

7.参考资料:

 

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

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

相关文章

【数学建模】-- 数学规划模型

概述: 什么是数学规划? 数学建模中的数学规划是指利用数学方法和技巧对问题进行数学建模,并通过数学规划模型求解最优解的过程。数学规划是一种数学优化方法,旨在找到使目标函数达到最大值或最小值的变量取值,同时满足…

免费内网穿透哪个好?

神卓互联是一种内网穿透技术,可以实现在外部网络访问公司内网的服务。通过建立一个加密的通道,神卓互联可以将内网的动态IP绑定技术,实现远程访问。 使用神卓互联进行内网穿透的步骤如下: 在公司内网中,安装并配置神卓…

Linux 进程间通信——有名管道和无名管道

一、管道的概念 当从一个进程连接数据流到另一个进程时,我们使用管道。通常把一个进程的输出通过管道连接到另一个进程的输入。 管道可以用来在两个进程之间传递数据,如: ps -ef | grep “bash”, 其中‘|’就是管道,其作用就是…

CH32V203 单片机 I2C 使用

CH32V203系列是基于32位RISC-V内核设计的工业级增强型低功耗通用微控制器,高性能,最高支持144MHz系统主频,低功耗,运行功耗低至45uA/MHz。CH32V203集成双路USB接口,支持USB Host主机及USB Device设备功能,具…

[NAS4]Tiny adversarial multi-objective one-shot neural architecture search

论文链接:https://arxiv.org/abs/2103.00363v1 代码链接: 摘要:移动设备中广泛使用的微小神经网络(TNN)容易受到对抗性攻击,对TNN鲁棒性的更先进研究需求也越来越大。 本文关注于如何在不损失模型精度的…

【win7Window】高仿Windows7系统窗体

特性&#xff1a; 任意拖拽到边界可以最大化、半屏放大双击边界可以水平、纵向最大化可以拖拽四边、四个顶点调整窗体尺寸可以最大化、还原、最小化、关闭支持双击标题栏最大化、还原支持双击左上角图标关闭窗体 win7Window源码 <template><div :class"$options…

JS的解析与Js2Py使用

JS的解析与Js2Py使用 JS的解析事件监听器搜索关键字请求关联JS文件 Js2PyJs2Py的简单使用安装Js2Py执行JavaScript代码调用JavaScript函数 Js2Py的应用示例创建JavaScript文件使用JavaScript JS的解析 在一个网站中&#xff0c;登录密码通常是会进行加密操作的&#xff0c;那么…

LeetCode--HOT100题(34)

目录 题目描述&#xff1a;94. 二叉树的中序遍历&#xff08;简单&#xff09;题目接口解题思路1代码解题思路2代码 PS: 题目描述&#xff1a;94. 二叉树的中序遍历&#xff08;简单&#xff09; 给定一个二叉树的根节点 root &#xff0c;返回 它的 中序 遍历 。 LeetCode做…

el-table根据容器大小自适应滚动条-修改滚动条样式

需求&#xff1a;父容器里有多个容器为上下级&#xff0c;之后浏览器在缩放的时候&#xff0c;上面容器高度改变了&#xff0c;所以el-table被挤压&#xff0c;如果el-table设置的是固定的高度&#xff0c;那么挤压后内容超出父容器&#xff0c;本文章就是解决这个问题 不自适…

拒绝无效内卷!新同事靠着这套大屏模板效率翻倍,搭上升职快车!

竞争是职场永恒的话题&#xff0c;太多人为了升职加薪卷生卷死&#xff0c;就拿我自己身边来说&#xff0c;这段时间我所在的小组有一个升职机会&#xff0c;好多老员工为了这个机会争得头破血流&#xff0c;一个在公司待了10年的老员工&#xff0c;直接天天加班到12点&#xf…

蓝牙耳机的发展

目录 1.蓝牙耳机的概念 2.蓝牙耳机的发展过程 3.蓝牙耳机的便利性 4.蓝牙耳机未来的发展趋势 1.蓝牙耳机的概念 蓝牙耳机是一种使用蓝牙无线技术连接到音频源设备&#xff08;如智能手机、平板电脑、电脑等&#xff09;的耳机。它们通过无线蓝牙信号接收音频数据&#xff0c…

MybatisPlus的使用

一. 关于注解的使用&#xff0c;官方地址&#xff1a; 注解 | MyBatis-PlusMyBatis-Plus 官方文档https://baomidou.com/pages/223848/#tablename 1.关于TableName的使用 假设我们不加TableName("tbl_employee")的话&#xff0c;那么数据库中的表名和类名相同的话&…

Qt下拉菜单

1&#xff0c;QComboBox 2&#xff0c;setMenu()---设置下拉菜单 AI对话未来丨智能写作对话: setMenu()是QWidget类的一个成员函数&#xff0c;在Qt中用于将一个菜单作为一个控件的下拉菜单设置。具体来说&#xff0c;它会把相应的菜单对象与该控件关联&#xff0c;并在控件上…

Mysql8.0为什么取消了缓存查询的功能

首先我们介绍一下MySQL的缓存机制 【MySQL缓存机制】简单的说就是缓存sql文本及查询结果&#xff0c;如果运行完全相同的SQL&#xff0c;服务器直接从缓存中取到结果&#xff0c;而不需要再去解析和执行SQL。 但如果表中任何数据或是结构发生改变&#xff0c;包括INSERT、UPD…

问道管理:放量打拐什么意思?常见的放量打拐三种形态?

成交量一直是股票交易中比较重要的目标&#xff0c;那么&#xff0c;放量打拐是什么意思&#xff1f;常见的放量打拐三种形状是什么&#xff1f;下面问道管理为我们预备了相关内容&#xff0c;以供参阅。 放量打拐什么意思&#xff1f; 放量是指股票成交量与前几个交易日比较显…

隐私文件夹怎么加密?隐私文件夹加密方法

在个人电脑中&#xff0c;我们经常会将一些个人隐私存放在电脑文件夹中&#xff0c;这些文件夹都需要加密保护。那么&#xff0c;隐私文件夹该怎么加密呢&#xff1f;下面我们就来了解一下吧。 超级秘密文件夹 隐私数据存放在文件夹中&#xff0c;最怕的就是被其他人发现。而如…

迅镭激光中标全球集装箱行业龙头中集集团10家子公司集采项目!

迅镭激光中标喜报频传!继连续中标工程机械、钢构、船舶、电力电气、新能源等多个行业龙头企业后&#xff0c;近日再次中标全球集装箱行业龙头中集集团(CIMC)&#xff0c;这与迅镭激光坚持高端、注重技术引领、十五年的技术沉淀和口碑积累密不可分。 日前&#xff0c;中集集团20…

如何使用ChatGPT创作一个小说式的虚构的世界

世界构建也许是小说写作中最重要的一环&#xff0c;但也可能非常耗时。让ChatGPT加快这一过程吧。 写小说最棒的一点就是有机会从零开始创造一个新世界。你可以创造超凡脱俗的景观&#xff0c;赋予人物魔法。神话故事可以存在于你小说中的现实世界&#xff0c;而传统可以帮助你…

gazebo仿真ros2两轮差速小车没有控制的情况下缓慢移动后退

最近在做一款2轮差速的机器人小车&#xff0c;在做gazebo仿真的时候&#xff0c;发现小车一直在缓慢的后退&#xff0c;一边后退一边缓慢拐弯。 环境&#xff1a;ros2 foxy gazebo-11 小车xacro模型代码 <?xml version"1.0"?> <robot name"jtb…