介绍某个代理服务器在压力测试时发生异常,以下是定位过程 保存dump因为提早有知道程序会出现异常,所以中间省去了很多步骤,在服务启动时就已经使用windbg attach到了服务进程上,这样一旦程序触发异常windbg立即就会捕获。dump下载:链接:https://pan.baidu.com/s/ ...
windows下c++反射功能
背景c++开发的软件在生产环境中运行出现一些bug,比如参数错误等问题,通过日志只能打印异常的行号或函数,但具体的结构体/类的参数内容打印却非常麻烦,无法做到一些更高级语言的反射功能。要做到能够通过变量地址就打印变量的内容信息,就需要依赖ms提供的msdia120.dll和程序编译后的pdb文件。 ...
踩内存(内存溢出)的异常定位
介绍某天晚上11点,钉钉预警提示某服务catch到一个异常导致服务重启,因为是上线了一个多月的服务,半夜遇到这样的问题,整个人有点懵,立刻打开电脑下载dump文件进行分析,不幸的是在分析的过程中,又连续的出现了几次崩溃,在这么反复崩溃、重启折腾了1小时左右,服务终于正常了。 分析dump下载路径:链 ...
windbg分析临界区死锁
介绍多线程编程中,对于资源同步导致的死锁问题,应该是开发过程中经常碰到的,同时在问题定位过程中也会花费大量的时间,这里就介绍下如何通过windbg来分析死锁问题。 资源同步windows下资源同步的方法主要是 原子访问 临界区 读写锁 旋转锁 等待函数 事件 信号量 互斥量 其中最常用的应该是临 ...
使用CMap导致服务高CPU
某天某服务预警一直提示某服务性能不足,cpu已满负荷。很是纳闷,这个服务是纯内存数据,没有io操作;而且都运行了快3个月了,怎么突然就性能不足了? 步骤1半夜从睡梦中被叫醒,先自己缕一缕思路(整个人都是懵的,基本缕不出思路),先解决线上问题, 让运维保存了一份fulldump,然后重启服务,线上正常 ...
捕获异常并自动保存dump
SetUnhandledExceptionFilter 捕获的异常有限,比如ctr异常、栈溢出的异常就无法捕获。 /************************************************************************//* 之所以应用程序捕获不到栈溢出异常 ...
简单分析minidump(2)
有了前几节的准备工作,我们的程序已经可以自动捕获异常了,那么我们开始通过windbg来分析dump解决实际问题。先从简单入手,CString大小写转化导致的异常(提取码ffk6)。 步骤1使用windbg打开minidump,设置好应用程序的pdb, 执行命令 “.ecxr” 、”kv” ,打印如下 ...