Debug模式下,窗口句柄(m_hWnd)无效?

时间:2021-03-27 18:39:55
RT.程序在Release下可以正常运行,debug下就要崩溃,崩溃的原因是我用sendmessage向主窗口发消息,debug下m_hWnd句柄值为???,可是Release下正常,这是什么情况呢?

11 个解决方案

#1


我也遇到过同样问题,表示关注一下。

#2


debug崩溃是因为有断言检查,说明m_hWnd的值是未知的,这时候扼杀掉bug是最好的。而Release是直接忽略断言的,所以不会报错。有时候m_hWnd的值是未知的Release照样可以运行,那是因为程序暂时没用到这个资源,但在程序跳到此堆栈时,XP下就会直接关闭程序,出现个调试框框了。win7是屏幕变白,显示关闭或调试程序。所以一般用debug来扼杀掉所有萌芽的bug。

#3


不应该,肯定有哪里操作不当的地方。
DEBUG有很多ASSERT窗体句柄的地方,而Release不一定有。
所以有错误Release不一定报错或出异常,除非操作了句柄。

#4


引用 2 楼 gibsonboy 的回复:
debug崩溃是因为有断言检查,说明m_hWnd的值是未知的,这时候扼杀掉bug是最好的。而Release是直接忽略断言的,所以不会报错。有时候m_hWnd的值是未知的Release照样可以运行,那是因为程序暂时没用到这个资源,但在程序跳到此堆栈时,XP下就会直接关闭程序,出现个调试框框了。win7是屏幕变白,显示关闭或调试程序。所以一般用debug来扼杀掉所有萌芽的bug。


++

#5


Release不去检查数据内容,你有时候可以正常运行。但是如果Debug下有问题,那你的程序肯定有问题。
看不到你的代码也无法找到错误根源。

#6


确实遇到过这种情况.
如果release运行正常的话,先不要管它.

#7


Debug出错,Release不出错,那么你的程序一定会有潜在的bug,只是没有表现出来而已

#8


引用 7 楼 visualeleven 的回复:
Debug出错,Release不出错,那么你的程序一定会有潜在的bug,只是没有表现出来而已

应该调试找出BUG并修复.

#9


    这和断言有什么关系?断言一般只是检测值存不存在,而不会改变m_hWnd的值吧?获取m_hWnd的代码是:AfxGetApp()->m_pMainWnd->m_hWnd,我也试了其他几种获取句柄代码,都是这样。这个程序界面很简单,就一个基于对话框的界面,上面放了一些分页控件,上述代码是在程序的CXXDlg类里使用的。
    崩溃是因为得到的主窗口句柄有错,虽然是断言促发,但是我的问题是为什么Debug下获取到的主窗口句柄是未知的而Release却正确?Release调试的时候是有值的,debug是没有值,就三个问号。请大家帮帮忙?

#10


表示关注,我也是这样的情况,relese后运行出来的新对话框并不显示我分页的内容。Debug直接就奔溃了!

#11


没有有效的解决办法么?

#1


我也遇到过同样问题,表示关注一下。

#2


debug崩溃是因为有断言检查,说明m_hWnd的值是未知的,这时候扼杀掉bug是最好的。而Release是直接忽略断言的,所以不会报错。有时候m_hWnd的值是未知的Release照样可以运行,那是因为程序暂时没用到这个资源,但在程序跳到此堆栈时,XP下就会直接关闭程序,出现个调试框框了。win7是屏幕变白,显示关闭或调试程序。所以一般用debug来扼杀掉所有萌芽的bug。

#3


不应该,肯定有哪里操作不当的地方。
DEBUG有很多ASSERT窗体句柄的地方,而Release不一定有。
所以有错误Release不一定报错或出异常,除非操作了句柄。

#4


引用 2 楼 gibsonboy 的回复:
debug崩溃是因为有断言检查,说明m_hWnd的值是未知的,这时候扼杀掉bug是最好的。而Release是直接忽略断言的,所以不会报错。有时候m_hWnd的值是未知的Release照样可以运行,那是因为程序暂时没用到这个资源,但在程序跳到此堆栈时,XP下就会直接关闭程序,出现个调试框框了。win7是屏幕变白,显示关闭或调试程序。所以一般用debug来扼杀掉所有萌芽的bug。


++

#5


Release不去检查数据内容,你有时候可以正常运行。但是如果Debug下有问题,那你的程序肯定有问题。
看不到你的代码也无法找到错误根源。

#6


确实遇到过这种情况.
如果release运行正常的话,先不要管它.

#7


Debug出错,Release不出错,那么你的程序一定会有潜在的bug,只是没有表现出来而已

#8


引用 7 楼 visualeleven 的回复:
Debug出错,Release不出错,那么你的程序一定会有潜在的bug,只是没有表现出来而已

应该调试找出BUG并修复.

#9


    这和断言有什么关系?断言一般只是检测值存不存在,而不会改变m_hWnd的值吧?获取m_hWnd的代码是:AfxGetApp()->m_pMainWnd->m_hWnd,我也试了其他几种获取句柄代码,都是这样。这个程序界面很简单,就一个基于对话框的界面,上面放了一些分页控件,上述代码是在程序的CXXDlg类里使用的。
    崩溃是因为得到的主窗口句柄有错,虽然是断言促发,但是我的问题是为什么Debug下获取到的主窗口句柄是未知的而Release却正确?Release调试的时候是有值的,debug是没有值,就三个问号。请大家帮帮忙?

#10


表示关注,我也是这样的情况,relese后运行出来的新对话框并不显示我分页的内容。Debug直接就奔溃了!

#11


没有有效的解决办法么?