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 阅读(1601) 评论(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 阅读(1226) 评论(0) 推荐(1)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

摘要: WinDbg可以通过加载Symbol文件(*.pdb),即时的调试程序。WinDbg如何找到相应的符号文件呢?WinDbg首先在.exe或者.dll所在目录下寻找同名的.pdb文件。如果找不到,WinDbg在Symbol File Path中查找。Symbol File Path可以通过多种方式设置 阅读全文
posted @ 2021-02-06 11:51 DoubleLi 阅读(3765) 评论(0) 推荐(0)

摘要: Windbg符号与源码 《第二篇》 符号文件是一种辅助数据,它包含了对应用程序代码的一些标注信息,这些信息在调试过程中非常有用。如果没有辅助数据,那么能获得的信息就只有应用程序的二进制文件。二进制文件很难调试,因为无法看到代码中的函数名、数据结构名等。这正是符号文件能显示的。符号文件的扩展名通常是p 阅读全文
posted @ 2021-02-06 11:32 DoubleLi 阅读(306) 评论(0) 推荐(0)

摘要: 我们经常用的windbg symbol path设置是: File -> Symbol File Path 但是自从OS升级到Win10以后,发现这个设置只能单次有效,关闭windbg后再打开,又需要重新设置,对于Windows symbol很是麻烦,查了下MSDN,原来还可以通过环境变量进行设置, 阅读全文
posted @ 2021-02-06 11:22 DoubleLi 阅读(1024) 评论(0) 推荐(0)

摘要: 一、Windbg Windbg是微软开发的一套调试器中的组件。WinDBG属于内核级别调试器,不仅可以用来调试应用程序,也可以调试内核级的代码,如驱动程序。Windbg由于其丰富的命令和对Windows的原生支持还有其易用性,是其他其他调试器望尘莫及的。如果安装了Windows SDK,一般会带有w 阅读全文
posted @ 2021-02-06 10:20 DoubleLi 阅读(3702) 评论(0) 推荐(0)

摘要: 前面4篇文章提到的方法,已经可以解决我们的大部分内存泄露问题了,但是这些方法是有前提的,那就是一定要有源代码,而且还只能是Debug版本调试模式下。实际上很多时候,我们的程序会用到第三方没有源代码的模块,有些情况下模块有内存泄露,但是没有证据,又或者VC++ MFC退出提示有内存泄漏,但是信息不足, 阅读全文
posted @ 2021-02-06 10:10 DoubleLi 阅读(441) 评论(0) 推荐(0)

摘要: 安装与配置 windbg 的 symbol (符号) 本篇是新手自己写的一点心得.建议新手看看.同时希望前辈多多指教. 写这篇的动机:在网上找了一上午的 windbg 配置符号教程.楞是没找到详细的,都讲的太模糊而且互相抄袭.不适合新手看.终于靠自己的努力弄懂了一点,呵呵写出来新手们分享. 安装与配 阅读全文
posted @ 2021-02-06 09:53 DoubleLi 阅读(222) 评论(0) 推荐(0)

摘要: 文章目录 一、符号文件的用处 二、下载符号文件(微软官方符号服务器无法访问) 三、加载用户层的符号文件 参考资料 一、符号文件的用处 符号文件即PBD(Program Debug DataBase)文件,他的用处是让调试器能够将地址与函数名对应,例如:WinDBG中输入命令u NtClose就能定位 阅读全文
posted @ 2021-02-06 09:51 DoubleLi 阅读(1554) 评论(0) 推荐(0)

摘要: 今天本来想跟着调个漏洞,结果折腾windbg就折腾了半天,仅做个记录。 1. 设置环境变量 _NT_SYMBOL_PATH srv*c:\symbols*http://msdl.microsoft.com/download/symbols 2. FQ 发现不FQ好像下载不了。 3. 发现有时候需要某 阅读全文
posted @ 2021-02-06 09:45 DoubleLi 阅读(877) 评论(0) 推荐(0)

摘要: 1. 首先设置符号表路径 在系统环境变量添加一个 _NT_SYMBOL_PATH 值为srv*d:\symbols*http://msdl.microsoft.com/download/symbols 这样IDA, windbg, vs 都会自动到该目录加载符号表. 对于这个路径d:\symbols 阅读全文
posted @ 2021-02-06 09:42 DoubleLi 阅读(551) 评论(0) 推荐(0)