Windows下问题定位

 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.mzph.cn/news/46538.shtml

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

相关文章

git权限问题解决方法Access denied fatal: Authentication failed

文章目录 遇到Access denied 的权限问题解决方法1、git的密码修改过,但是本地没更新。2、确定问题,然后增加配置① 查询用户信息②如果名称和email不对,设置名称:③ 检查ssh-add是否链接正常④ 设置不要每次都输入用户名密码 3、配…

【校招VIP】CSS校招考点之选择器优先级

考点介绍: 选择器是CSS的基础,也是校招中的高频考点,特别是复合选择器的执行优先级,同时也是实战中样式不生效的跟踪依据。 因为选择器的种类较多,很难直接记忆,可以考虑选择一个相对值,比如id类…

人大进仓数据库ksql命令基础

测试环境信息: 系统为银河麒麟V10 数据库为Kingbase ES V8 数据库安装目录为/opt/Kingbase/ES/V8 ksql命令位于/opt/Kingbase/ES/V8/Server/bin下 使用--help获取帮助 续上图 1.查看数据库列表 ./ksql -U system -l 2.查看数据库版本 ./ksql -V 3.连接指定的数据库tes…

【GAMES202】Real-Time Shadows2—实时阴影2

一、PCSS回顾 上一篇我们说了如何用PCSS是实现软阴影,这个过程是没有任何问题的,但是有一个速度的问题,因为PCSS涉及到非常多次对纹理特定某一块区域遍历的操作(工业界一般都是用在该区域采样的方式,会因此产生噪声&am…

Zookeeper集群单节点启动成功但未同步其他节点数据

首先排查节点启动是否正常: 在zookeeper的bin目录下执行:sh zkServer.sh status 判断当前节点数据leader 还是follower 节点都启动正常,但某一个zookeeper集群节点(下面简称“异常节点”)不同步其他节点数据&#xf…

SQL-每日一题【1321. 餐馆营业额变化增长】

题目 表: Customer 你是餐馆的老板,现在你想分析一下可能的营业额变化增长(每天至少有一位顾客)。 计算以 7 天(某日期 该日期前的 6 天)为一个时间段的顾客消费平均值。average_amount 要 保留两位小数。 结果按 …

最新两年工作经验总结

最新两年工作经验总结 前言URP的使用1:如何开启URP1、老项目升级为URP2、创建新项目时选择URP创建 2:URP阴影的设置 PolyBrush的使用(地图编辑插件)制作山峰or低谷边缘柔化雨刷上色制造场景中的物体贴图地形创建容易踩坑的点ProBu…

java 工程管理系统源码+项目说明+功能描述+前后端分离 + 二次开发 em

Java版工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离 功能清单如下: 首页 工作台:待办工作、消息通知、预警信息,点击可进入相应的列表 项目进度图表:选择(总体或单个)项目显…

【C++习题集】-- 堆

(用于复习) 目录 树概念及结构 名词概念 二叉树概念及结构 特殊的二叉树 满二叉树 完全二叉树 运算性质 二叉树存储结构 顺序存储 链式存储 堆 - 顺序存储 堆的性质 堆的实现 堆的应用 堆排序 直接建堆法 树概念及结构 概念&#xff1a…

编写Dockerfile制作自己的镜像并推送到私有仓库

说明:我将用到的私有仓库是Harbor,安装教程参考我的这一篇文章: 安装搭建私有仓库Harbor_Word_Smith_的博客-CSDN博客 一、案例1 1、要求 编写Dockerfile制作Web应用系统nginx镜像,生成镜像nginx:v1.1,并推送其到私…

【高级IO】- 五种 IO 模型 | 多路转接 - select

目录 IO的基本概念 什么是高效的IO? 五种IO模型 阻塞IO 非阻塞IO 信号驱动IO IO多路转接 异步IO 同步通信VS异步通信(synchronous communication / asynchronous communication) 同步通信VS同步与互斥 阻塞VS非阻塞 其他高级IO …

JavaScript高级

1、JavaScript面向对象 1.1、面向对象介绍 ​ 在 Java 中我们学习过面向对象&#xff0c;核心思想是万物皆对象。在 JavaScript 中同样也有面向对象。思想类似。 1.2、类的定义和使用 结构说明 代码实现 <!DOCTYPE html> <html lang"en"> <head>…

十问华为云 Toolkit:开发插件如何提升云上开发效能

众所周知&#xff0c;桌面集成开发环境&#xff08;IDE&#xff09;已经融入到开发的各个环节&#xff0c;对开发者的重要性和广泛度是不言而喻的&#xff0c;而开发插件更是建立在IDE基础上的功能Buff。 Huawei Cloud ToolKit作为华为云围绕其产品能力向开发者桌面上的延伸&a…

快速实现SAP的移动化和流程优化

热门议题&#xff1a; 1、企业如何快速解决人员移动办公的需求&#xff0c;比如在苹果安卓手机&#xff0c;平板电脑&#xff0c;MAC登录SAP。2、企业如何解决用户经常抱怨的流程复杂&#xff0c;操作繁琐&#xff0c;难以使用等问题 公司介绍&#xff1a; Synactive,Inc. 是…

8. 实现业务功能--用户注册

目录 1. 顺序图 2. 参数要求 3. 接口规范 4. 创建扩展 Mapper.xml 5. 修改 DAO 6. 创建 Service 接口 7. 实现接口 8. 测试接口 9. 实现 Controller 9.1 密码加密处理 10. 实现前端界面 业务实现过程中主要的包和目录及主要功能&#xff1a; model 包&#xff1a;实体对象 d…

vue 弹出框 引入另一个vue页面

为什么要这么做,适用于在一个页面逻辑比较多的时候,可以搞多个页面,防止出错 index页面点击解约按钮,弹出框 进入jieyue.vue 核心代码 <el-buttonsize"mini"type"text"icon"el-icon-edit"v-if"scope.row.delFlag 0"click"j…

探索人工智能 | 模型训练 使用算法和数据对机器学习模型进行参数调整和优化

前言 模型训练是指使用算法和数据对机器学习模型进行参数调整和优化的过程。模型训练一般包含以下步骤&#xff1a;数据收集、数据预处理、模型选择、模型训练、模型评估、超参数调优、模型部署、持续优化。 文章目录 前言数据收集数据预处理模型选择模型训练模型评估超参数调…

websocker无法注入依赖

在公司中准备用websocker统计在线人数&#xff0c;在WebSocketServer使用StringRedisTemplate保存数据到redis中去&#xff0c;但是在保存的时候显示 StringRedisTemplate变量为null 详细问题 2023-08-20 10:37:14.109 ERROR 28240 --- [nio-7125-exec-1] o.a.t.websocket.po…

NAS个人云存储 - 手把手教你搭建Nextcloud个人云盘并实现公网远程访问

文章目录 摘要1. 环境搭建2. 测试局域网访问3. 内网穿透3.1 ubuntu本地安装cpolar3.2 创建隧道3.3 测试公网访问 4 配置固定http公网地址4.1 保留一个二级子域名4.1 配置固定二级子域名4.3 测试访问公网固定二级子域名 摘要 Nextcloud,它是ownCloud的一个分支,是一个文件共享服…

LeetCode ——二叉树篇(三)

刷题顺序及思路来源于代码随想录&#xff0c;网站地址&#xff1a;https://programmercarl.com 二叉树的定义及创建见&#xff1a; LeetCode ACM模式——二叉树篇&#xff08;一&#xff09;_要向着光的博客-CSDN博客 目录 116. 填充每个节点的下一个右侧节点指针 117. 填…