
Windbg调试实战
文章平均质量分 79
本专栏介绍Windbg调试c++程序的崩溃,死锁,内存泄漏,句柄泄漏等一系列问题,以实际的项目代码或者demo进行演示讲解。
Simple Simple
biubiubiu...
展开
-
(Windbg调试七)c++内存泄漏问题定位
c++内存泄漏问题定位 内存泄漏指的是直接内存分配构造函数(例如new,malloc,HeapAlloc)来获得内存后,但是没有释放该片区域内存而导致的泄漏问题。我们的行情服务器是一个长期运行在客户服务器上的应用程序,如果存在内存泄漏,那么当内存增长到某个值时,会极大地影响当前机器的性能,直至影响我们的行情服务程序,甚至由于内存已不够而导...原创 2019-07-20 14:40:31 · 6245 阅读 · 1 评论 -
(Windbg调试六)c++句柄泄漏问题定位
c++句柄泄漏问题定位 在Windows内核中定义了一组操作系统特有的对象类型,包括文件对象,线程对象,Event对象等等。要使用某种对象类型,必须首先生成这种对象类型的一个实例,以事件对象为例,以CreateEvent可以创建或者打开一个有名的事件对象,在该函数内部,它调用了内核接口来创建一个事件对象,并且分配了相应的内存来容纳这个对象...原创 2019-07-17 20:02:23 · 6102 阅读 · 0 评论 -
(Windbg调试一)minidump崩溃捕捉
(Windbg调试四)dump崩溃捕捉一,系统的异常处理顺序二,SetUnhandleExceptionFilter函数三,Minidump四,代码演示平常我们编写c++代码时,发生崩溃,编译器都可以帮我们捕捉到并且定位到具体的代码,这是因为编译器接收到了操作系统发送过来的程序异常通知并进行了处理。但是在使用我们软件的用户环境上,没有编译器帮我们处理这个异常,操作系统会使用它的异常处理机制:弹出...原创 2019-07-03 20:12:49 · 11242 阅读 · 7 评论 -
(Windbg调试五)C++内存越界导致的std::map异常
C++内存越界导致的std::map异常 前段时间在定位一个程序崩溃的问题,虽然有dump文件,能够看到出问题的具体代码行数,问题都出在同一个map上。 dump1显示map下标插入数据时异常。 dump2显示调用ma...原创 2019-06-13 21:14:23 · 9476 阅读 · 4 评论 -
(Windbg调试二)Windows下c++程序崩溃问题定位
Windows下c++程序崩溃问题定位一,WinDbg调试虚拟地址 = pe头文件大小 + 最佳装载地址 +相对虚拟地址1004ff19 = 10000000 + 最佳装载地址 + 0004ef19 -》最佳装载地址 = 0x1000二,地址偏移计算验证三,通过map文件定位程序崩溃代码行数     Windows下c++程序崩溃问题定位主要依赖...原创 2018-12-27 20:03:24 · 18253 阅读 · 5 评论 -
(Windbg调试三)C++ delete指针后依然可以访问的问题
C++ delete指针后依然可以访问的问题一,第一个dump分析二,第二个DUMP分析三,VC6.0和VS2015下delete指针验证四,结论    &原创 2019-02-01 16:55:42 · 9680 阅读 · 2 评论 -
(Windbg调试四)C++死锁问题定位与分析
C++死锁问题定位与分析一,测试代码二,等待链三,死锁的定位和分析     C++程序异常一般有两种表现形式:程序崩溃和程序无响应。程序崩溃主要是由指针,数组越界等原因引起,这种情况可以直接通过在程序中加入Dump捕捉逻辑,分析dump文件,定位出崩溃的代码。程序无响应主要是由死循环和死锁两个原因原创 2019-02-11 11:10:59 · 11016 阅读 · 0 评论 -
(Windbg调试八)崩溃捕捉的dump没有提供堆栈的问题
崩溃捕捉的dump没有提供堆栈的问题前两天客户现场出现了崩溃,但是程序捕捉生成的dump文件大小为0kb,没有办法只能通过任务管理器创建转储文件进行分析,但是分析这个dump时,却看不到任何有效的对战信息。输入!analyze -v命令输出如下:通过此堆栈信息看不出任何崩溃的具体原因。再输入~*kv命令查看所有线程的堆栈:可以看到崩溃的线程,输入~56s切换到该线程,再输入kv查看该线程的堆...原创 2019-09-13 13:44:59 · 10547 阅读 · 0 评论