DoubleLi

qq: 517712484 wx: ldbgliet

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

2021年2月6日

摘要: 文章目录 1、使用windbg中的umdh检查 1.1、 工具下载 1.2、环境配置 1.3、利用工具umdh(user-mode dump heap)分析 1.4、利用umdh创建heap快照 2、使用windbg中的htrace检查 2.1、准备工作 2.2、快照 2.3 、执行操作,比较差异 阅读全文
posted @ 2021-02-06 15:48 DoubleLi 阅读(1553) 评论(0) 推荐(0)

摘要: 想要知道程序从开始到运行一段时间内存的使用情况,可以使用gflags工具。 1. windbg同级目录下有gflags.exe,点开后进行如下设置。 2. 在gflags.exe的目录下直接打开命令窗口 输入gflags /i myTest.exe +ust set _NT_SYMBOL_PATH= 阅读全文
posted @ 2021-02-06 15:44 DoubleLi 阅读(1184) 评论(0) 推荐(1)

摘要: 内存泄漏 1、方法一:批处理 umdh 原理:借助winDBG 工具,先设置好pdb路径,然后加入进程,运行进程,抓取第一次快照(Snap1.log );运行一段时间(让内存增长),然后执行内存泄漏检测分析.bat,抓取第二次快照(Snap2.log)。最终,比较两次快照结果存到result.txt 阅读全文
posted @ 2021-02-06 15:41 DoubleLi 阅读(3455) 评论(0) 推荐(0)

摘要: 在大型项目中,内存泄露并不会立即crash,会使系统性能不断下降,甚至因内存耗尽而崩溃。排查起来难度也比较大,申请内存的地方很多。这里介绍的这种方法可以迅速定位问题。 下面的程序crash64,每秒会申请1M的内存,而一直都没有释放,产生内存泄露 windbg 中有个小工具 UMDH可以追踪系统每个 阅读全文
posted @ 2021-02-06 15:37 DoubleLi 阅读(456) 评论(0) 推荐(0)

摘要: 本篇文章参考链接: http://bbs.pediy.com/showthread.php?t=107893 ,作者:dnapcex。 windbg安装文件链接:下载地址 最近在查找内存泄露时又偶遇windbg,依然碰到当时纠结的符号表问题。之前公司不能上外网,符号表问题实在不好弄,当时驱动算是做完 阅读全文
posted @ 2021-02-06 15:27 DoubleLi 阅读(161) 评论(0) 推荐(0)

摘要: 在使用WPA分析性能的时候,发现一款轻量级的内存泄露分析工具UMDH(User-Mode Dump Heap),现在研究实践如何使用该工具进行内存泄露分析 Umdh 是 Debugging Tools for Windows 里面的一个工具,主要通过分析比较进程的Heap Stack trace信息 阅读全文
posted @ 2021-02-06 15:24 DoubleLi 阅读(758) 评论(0) 推荐(0)

摘要: A.利用工具umdh(user-mode dump heap)分析:此处以程序MemoryLeak.exe为例子 1、开启cmd 键入要定位内存泄露的程序gflags.exe /i memroyleak.exe +ust,如图成功后,开启memoryleak.exe程序。 2、利用UMDH创建Hea 阅读全文
posted @ 2021-02-06 15:20 DoubleLi 阅读(423) 评论(0) 推荐(0)

摘要: 缘起: 作为C++程序员,检测内存泄漏是非常痛苦的事情。尤其是看着程序的内存在一直增长,你却无能为力。此时,windbg可以用来检测内存泄漏。 配置windbg: 配置symbol文件路径: “SRV*d:\symbols*http://msdl.microsoft.com/download/sym 阅读全文
posted @ 2021-02-06 15:13 DoubleLi 阅读(1369) 评论(0) 推荐(0)

摘要: 一、简介 生产环境偶尔会出现一些异常问题,WinDbg 或 GDB 就是解决此类问题的利器。调试工具 WinDbg 如同医生的听诊器,是系统生病时做问题诊断的逆向分析工具,Dump 文件类似于飞机的黑匣子,记录着生产环境程序运行的状态。 本文主要介绍了调试工具 WinDbg 和抓包工具 ProcDu 阅读全文
posted @ 2021-02-06 14:53 DoubleLi 阅读(376) 评论(0) 推荐(0)

摘要: 1. 如何生成dump文件? 原理:通过SetUnhandledExceptionFilter设置捕获dump的入口,然后通过MiniDumpWriteDump生成dump文件; SetUnhandledExceptionFilter:https://msdn.microsoft.com/query 阅读全文
posted @ 2021-02-06 14:48 DoubleLi 阅读(443) 评论(0) 推荐(0)

摘要: UnhandledExceptionFilter 函数调用时没有异常处理程序定义来处理引发的异常。 函数通常将异常传递达 Ntdll.dll 文件这将捕捉并试图处理它。 在该进程的内存快照存在某些情况下,您可以看到到一个线程持有锁点的线程调用的 UnhandledExceptionFilter 函数 阅读全文
posted @ 2021-02-06 14:41 DoubleLi 阅读(1036) 评论(0) 推荐(0)

摘要: 崩溃捕捉的dump没有提供堆栈的问题 前两天客户现场出现了崩溃,但是程序捕捉生成的dump文件大小为0kb,没有办法只能通过任务管理器创建转储文件进行分析。 输入 !analyze -v命令输出如下: 通过此堆栈信息看不出任何崩溃的具体原因。再输入~*kv命令查看所有线程的堆栈:可以看到崩溃的线程, 阅读全文
posted @ 2021-02-06 14:39 DoubleLi 阅读(527) 评论(0) 推荐(0)

摘要: c++内存泄漏问题定位 内存泄漏指的是直接操作内存分配构造函数(例如new,malloc,HeapAlloc)来获得堆内存后,但是没有释放而导致的泄漏问题。我们的行情服务器是一个长期运行在客户服务器上的应用程序,如果存在内存泄漏,那么当内存增长到某个值时,会极大地影响当前机器的性能,直至影响我们的行 阅读全文
posted @ 2021-02-06 14:31 DoubleLi 阅读(681) 评论(0) 推荐(0)

摘要: c++句柄泄漏问题定位 Windows内核中定义了一组操作系统特有的对象类型,包括文件对象,线程对象,Event对象等。要使用某种对象类型,必须首先生成这种对象类型的一个实例,以事件对象为例,调用CreateEvent可以创建或者打开一个现有的Event,在该函数内部,它调用了内核接口来创建一个事件 阅读全文
posted @ 2021-02-06 14:22 DoubleLi 阅读(563) 评论(0) 推荐(0)

摘要: C++内存越界导致的std::map异常 前段时间在定位一个程序崩溃的问题,虽然有dump文件,能够看到出问题的具体代码行数,问题都出在同一个map上。 dump1显示map下标插入数据时异常。 dump2显示调用map的clear函数异常。 刚开始看到这两个dump,以为是多线程导致的访问冲突,看 阅读全文
posted @ 2021-02-06 14:17 DoubleLi 阅读(1023) 评论(0) 推荐(0)

摘要: C++死锁问题定位与分析 一,测试代码 二,等待链 三,死锁的定位和分析 C++程序异常一般有两种表现形式:程序崩溃和程序无响应。程序崩溃主要是由指针,数组越界等原因引起,这种情况可以直接通过在程序中加入Dump捕捉逻辑,分析dump文件,定位出崩溃的代码。程序无响应主要是由死循环和死锁两个原因造成 阅读全文
posted @ 2021-02-06 14:15 DoubleLi 阅读(1529) 评论(0) 推荐(0)

摘要: C++ delete指针后依然可以访问的问题 一,第一个dump分析 二,第二个DUMP分析 三,VC6.0和VS2015下delete指针验证 四,结论 这两天在定位一个BUG:我们的程序运行过程中,点击停止运行,程序偶现无响应和崩溃,此时无查询操作(因为当并发查询的时候,有出现其他bug,特意确 阅读全文
posted @ 2021-02-06 14:14 DoubleLi 阅读(530) 评论(0) 推荐(0)

摘要: Windows下c++程序崩溃问题定位 一,WinDbg调试 二,地址偏移计算验证 三,通过map文件定位程序崩溃代码行数 Windows下c++程序崩溃问题定位主要依赖于代码编译过程中生成的调试信息文件,比如.map和.pdb。 本文以前几天项目中出现的崩溃问题当做具体案例来分析。具体原因是配置了 阅读全文
posted @ 2021-02-06 14:12 DoubleLi 阅读(2577) 评论(0) 推荐(0)

摘要: Windbg调试一)minidump崩溃捕捉 一,系统的异常处理顺序 二,SetUnhandleExceptionFilter函数 三,Minidump 四,代码演示 在日常工作中,本地c++代码发生崩溃时,编译器都可以帮我们捕捉到并且定位到具体的代码,这是因为编译器接收到了操作系统发送过来的程序异 阅读全文
posted @ 2021-02-06 14:10 DoubleLi 阅读(1074) 评论(0) 推荐(0)

摘要: 设置符号路径 利用环境变量设置符号路径 在WinDbg启动时,会根据 _NT_ALT_SYMBOL_PATH 和 _NT_SYMBOL_PATH 的值设置符号路径: > set _NT_ALT_SYMBOL_PATH="D:\symbols" > windbg notepad.exe 利用启动参数设 阅读全文
posted @ 2021-02-06 11:54 DoubleLi 阅读(2645) 评论(0) 推荐(0)