一次 STATUS_STACK_BUFFER_OVERRUN 栈溢出错误排查
2014-01-27 15:59
405 查看
程序被中断下来后,调试器附加上去,发现调用栈是在调用窗口过程时候中断的,当前的消息是WM_PAINT,其他线索没有,如果继续运行就导致进程退掉了,尝试直接从vs环境调试运行也是同样的结果,但是在Output面板发现的报告了 STATUS_STACK_BUFFER_OVERRUN 字面理解就是栈溢出了,WM_PAINT消息处理时候和栈溢出有啥关系呢,通过窗口句柄找到对应的控件类型和id,到工程搜了一遍,发现有一个listview控件的定制类在,但该类根本没有响应WM_PAINT消息,都是系统默认在画,在看看消息映射部分,发现用的是虚拟列表形式,那就好办了,我对这个消息是有印象的,知道其中的系统缓冲区长度是有限制的,我心想答案已经有了,直接定位到系统回调LVN_GETDISPINFO的响应函数时候,发现真的是粗暴的用lstrcpy来拷贝字符串到系统缓冲区,那解决办法就是wcsncpy_s(pItem->pszText,
260, msgItem.strRecvNames, _TRUNCATE);虽然问题是解决了,但是还没有找到一种办法直接定位到当时栈溢出时候的调用栈,有点郁闷。
参考:
http://msdn.microsoft.com/en-us/library/windows/desktop/bb774760(v=vs.85).aspx http://msdn.microsoft.com/zh-cn/magazine/cc163311.aspx#S4
260, msgItem.strRecvNames, _TRUNCATE);虽然问题是解决了,但是还没有找到一种办法直接定位到当时栈溢出时候的调用栈,有点郁闷。
参考:
http://msdn.microsoft.com/en-us/library/windows/desktop/bb774760(v=vs.85).aspx http://msdn.microsoft.com/zh-cn/magazine/cc163311.aspx#S4
相关文章推荐
- Zookeeper日记——记录一次集群启动错误排查
- 一次c3p0连接池连接异常错误的排查
- 一次segfault错误的排查过程
- 第一次遇到死锁——记一次程序卡住问题的错误排查过程
- 一次nginx 504 Gateway Time-out错误排查、解决记录__转载
- spring-boot初学者:记一次搭建web项目404的错误排查过程
- 记一次微信APP支付-1错误排查方法
- 很好的一个分析bug的文章,供以后疑难bug参考,转一下:一次segfault错误的排查过程
- 【FAQ】【JSP】HTTP Status 500 - Summary(问题排查时候应该仔细分析所有的错误打印说明)
- 一次 JMeter 脚本请求错误 HTTP Status 415 的解决笔记
- 一次 JMeter 脚本请求错误 HTTP Status 415 的解决笔记
- 一次segfault错误的排查过程
- 一次c3p0连接池连接异常错误的排查
- 记录一次Android交叉编译ffmpeg排查错误
- 记一次nginx部署yii2项目时502 bad gateway错误的排查
- 记一次Thrift Server错误排查
- 一次nginx 504 Gateway Time-out错误排查、解决记录
- mysql sql执行错误#1436 Thread stack overrun
- 记一次 oracle ORA-01722: 无效数字 错误排查