callstack的恢复

2019-06-26
阅读 3 分钟
2.2k
程序崩溃的时候有时候会产生dump,或者弹出错误框“×××已停止工作”,这时候用windbg打开dump文件或者attach到进程,查看异常的线程,有时候线程的调用栈已经看不到,如何最大限度的手动恢复栈呢?我也曾经为了解决这个问题查了不少资料,现在也没找到完美的方法,限于自己的知识,只能尽力去恢复。

多线程读写同一vector变量引发进程崩溃

2019-05-06
阅读 1 分钟
8.1k
vector是代替数组的简单容器,它不需要额外的代码能实现数组长度的动态扩展。 在test1方法中,连续的push_back会导致vector内部中的数组存储结构不停的delete和new。在test方法中,访问数组的第一个元素,有可能此时的内部结构已经被delete还没来得及new。 解决此种问题的思路一般是对vector的操作放在单独一个线程或者...

VS C++常用编译选项设置

2019-04-23
阅读 1 分钟
4.2k
1.宏展开代码中经常用到的各种宏,尤其是宏中继续定义宏,代码看上去比较复杂。可见宏带来了方便的同时,也给代码阅读带来了部分困难,好在VS中提供了宏展开的选项。以VS2010为例,具体为:工程右键Properties->Configuration Properties->C/C++->Preprocessor->PreProcess to a file,设置为Yes(/P)。

new内存太大引发进程崩溃

2019-04-22
阅读 1 分钟
3k
在调试一个内存越界的问题时,开启了gflags -p /enable *.exe /full,之后进程再也无法启动成功,查看此时进程内存,亦只有300多M,还剩余很多。另外产生的dump文件中,显示用户可用内存有100多M。通过调试发现,此时进程停在了new的地方,具体调用栈如图1:图1 异常调用栈

windbg常用命令详解

2019-04-22
阅读 1 分钟
1.9k
ba(break on access),当指定的内存被访问时触发例子如下:r指read或者write后面的变量g_nCacheCapacity地址,大小为4个字节时,触发断点。

使用umdh工具检测windows进程内存泄漏

2019-04-18
阅读 1 分钟
6k
一.简介 内存泄漏指由于编码错误导致进程的内存未能释放,从而不断增加,严重的情况可导致进程崩溃。 二.umdh工具检测内存泄漏的方法 umdh是windbg自带的一个检测内存泄漏的工具,用于检测windows下进程的内存泄漏。具体步骤如下: 1.设置用户态栈跟踪数据库(user mode stack trace database ),跟踪的进程为test.exe ...

栈缓冲区溢出(stack Buffer Overrun)引发进程崩溃

2019-04-18
阅读 1 分钟
8.7k
一.问题描述 程序崩溃,如果1所示 图1 进程崩溃图 二.使用windbg调试 使用windbg attach上崩溃的进程,执行命令~*kn,观察所有的线程,其中某个线程(09s)的调用栈如图2所示 图2 9号线程的调用栈在该线程的调用栈中,出现了__report_gsfailure函数,此函数的存在是判断此线程出问题的原因。 三.cookie机制 VS2005版本开...

栈空间太大超过工程设定值引发的进程崩溃

2019-04-13
阅读 1 分钟
2k
1.修改工程中stack reserve size的大小,工程右键Properties->Linker->System->Stack Reserve Size中进行修改,改为10M或者更大。此示例程序中teststacksize1和teststacksize2方法中一共申请了1,200,000个字节。此方法不推荐,因为可能会有更大字节的局部变量。 附:在CMakeLists.txt中这样设置: set(CMAKE_...