WM_CREATE 引起的 bug 一则
今天在维护一个 Windows 程序时,发现一个 bug ,记录一下。
这是一个简单的 Windows 程序,在注册给窗口的 WinProc 回调函数中处理了 WM_CREATE
和 WM_PAINT
WM_TIMER
等消息。
bug 的现象是,WM_CREATE
的流程没有走完就开始处理 WM_TIMER
等消息了。表现起来仿佛 WinProc 被重入了。
仔细排查后发现,不知道什么奇怪的原因,我的 Win7 系统在处理 WM_CREATE
消息时,默认捕获了异常。导致消息处理的流程没有走完,但进程却没有崩溃,窗口也被正确创建出来了。然后这个窗口可以继续接收 WM_TIMER
等消息。
我在不同的机器上测试了一下,确认是 Windows 的问题。貌似过去没有碰到过。目前我用的是 Windows 7 的 64 位版本,使用 mingw32 生成的 32bit 程序。
有兴趣的同学可以一试,在
WinProc 里加几行:
case WM_CREATE: { int *p = NULL; *p = 0; break; }
这个非法地址写指令不会让进程崩溃。
google 了一下,似乎没有人反应类似问题。
Comments
Posted by: 好笔头 | (14) October 22, 2013 12:52 PM
Posted by: zxy | (13) May 30, 2013 07:40 AM
Posted by: Meiosis | (12) May 3, 2013 10:05 AM
Posted by: lh | (11) April 28, 2013 03:02 PM
Posted by: yuan | (10) April 19, 2013 08:07 AM
Posted by: dpff | (9) April 15, 2013 11:04 PM
Posted by: liuhongbo | (8) April 15, 2013 10:27 PM
Posted by: Anonymous | (7) April 15, 2013 10:00 PM
Posted by: magiclhd | (6) April 15, 2013 09:33 PM
Posted by: magiclhd | (5) April 15, 2013 09:32 PM
Posted by: Cloud | (4) April 15, 2013 09:09 PM
Posted by: fenix124 | (3) April 15, 2013 06:38 PM
Posted by: fenix124 | (2) April 15, 2013 06:36 PM
Posted by: readdir_r | (1) April 15, 2013 05:44 PM