青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

今天遇到一個比較有意思的bug, 這里簡單記錄下。

Bug的癥狀是通過拖拉邊框把我們客戶端主窗口拖小之后,再最大化,會發現窗口顯示有問題, 看起來像是刷新問題, 有些地方顯示的不對了。
這里要說明的是我這里的主窗口是非常復雜的窗口, 里面集成了很多組件(cpmponent),有很多層的子窗口。 這個問題只有在特定條件下才會發生, 正常情況下都是好的。

遇到這種問題,我們怎么處理? 

首先當然是觀察癥狀, 究竟是刷新問題, 還是Layout出錯了。
我們可以通過Spy++查看窗口層次是不是正確, 窗口位置是不是對的。
查看結果是窗口的層次和Layout位置都沒有問題。

既然我們這里遇到的刷新問題,所以我們要從WM_PAINT消息著手, 我們通過Spy++查看相關窗口的WM_PAINT是不是正確。
很快我們就會發現某個窗口正在不停地收到WM_PAINT消息, 很可能與我們的bug有關。

一個窗口不停的收到WM_PAINT重畫, 無非大概有幾類原因:
正常情況是我們正在做動畫, 可能是通過定時器之類的東西讓窗口不停地InvalidateRect重畫某塊區域, 我們的窗口明顯不屬于這種情況。
異常情況有時是WM_PAINT消息里我們的消息處理函數在某些條件下直接返回了,從而沒有調用BeginPaint告訴窗口無效區域已經有效, 這樣會因為因為窗口一直有無效區域存在,導致窗口一直收到WM_PAINT消息。
還有一種異常情況情況是我們是在WM_PAINT消息里調用BeginPaint后又調用了InvalidateRect, 這樣會導致窗口后面會再次收到WM_PAINT消息, 最后窗口陷入WM_PAINT的死循環。 

那么我們這里的問題窗口屬于哪類? 用什么方法可以判斷出來?

注意到這里關鍵的三個API:BeginPaint, EndPaint, InvalidateRect的第一個參數都是窗口句柄, 我們可以通過WinDbg的API斷點來跟蹤執行過程, Attach WinDbg到我們的主窗口進程,比如我們的窗口句柄是0x209A0, 我們可以這樣設置API斷點:
bp USER32!NtUserInvalidateRect ".if(dwo(@esp+0x4)==0x209A0) {kv;gc} .else {gc}"
bp USER32!NtUserBeginPaint ".if(dwo(@esp+0x4)==0x209A0) {kv;gc} .else {gc}"
bp USER32!NtUserEndPaint ".if(dwo(@esp+0x4)==0x209A0) {kv;gc} .else {gc}"
上面的條件斷點表示,當調用我們的對應的API,并且第一個參數(窗口句柄)是我們的目標窗口時,打印堆棧。

很快我定位出Bug發生的原因了, 條件斷點顯示了API如下的調用次序:
BeginPaint->InvalidateRect->InvalidateRect->EndPaint
找到Bug的原因后,然后把Bug assign給該模塊的負責人。 (看我夠意思吧,不僅找到原因,還把調用棧都提供了)

另外 ,后面還發現這個bug發生時窗口的某些行為會不對, 測試發現原因是所有窗口的定時器都不能正常工作了。
關于這個問題, 你能想到原因嗎? 

如果想不到, 請把我的這篇博客《從點擊Button到彈出一個MessageBox, 背后發生了什么》看一遍。
如果看了還想不到, 重點看第4條。

最后, 簡單總結下:計算機的好處是它永遠不會欺騙你, 它只會按部就班的執行, 所以很多看似奇怪(甚至看似不可思議的問題), 只要你理解了程序背后的機制原理,都是可以找出根本原因的。
posted on 2014-05-30 23:18 Richard Wei 閱讀(2712) 評論(2)  編輯 收藏 引用 所屬分類: windbg

FeedBack:
# re: 記一個界面刷新相關的Bug
2014-06-04 09:59 | friv 3
我將收藏此頁,并與他的幾個朋友一起分享,希望他們能有所幫助。感謝分享。
http://www.friv3go.com  回復  更多評論
  
# re: 記一個界面刷新相關的Bug
2014-06-22 20:52 | 旗袍女裝
所以很多看似奇怪(甚至看似不可思議的問題), 只要你理解了程序背后的機制原理,都是可以找出根本原因的。旗袍女裝www.ssnz88.net  回復  更多評論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美午夜无遮挡| 欧美日韩国产在线播放网站| 欧美一区二区精品| 亚洲欧美日韩直播| 亚洲男人的天堂在线观看| 亚洲五月婷婷| 午夜免费在线观看精品视频| 亚洲欧美视频| 欧美一站二站| 久久综合狠狠综合久久综青草| 久久激情五月丁香伊人| 久久久噜噜噜久噜久久| 女仆av观看一区| 欧美久久影院| 国产精品日韩一区| 国产一区二区日韩精品| 在线观看一区二区精品视频| 亚洲人成在线影院| 亚洲视频网站在线观看| 性欧美在线看片a免费观看| 久久久xxx| 欧美黑人一区二区三区| 亚洲老司机av| 午夜精品剧场| 男男成人高潮片免费网站| 欧美日韩国产精品成人| 国产精品亚洲第一区在线暖暖韩国 | 亚洲欧洲一区二区在线播放| 亚洲精品偷拍| 午夜日韩激情| 美脚丝袜一区二区三区在线观看| 亚洲激情六月丁香| 亚洲天堂男人| 久久久亚洲人| 欧美日韩一区二区高清| 国产一区三区三区| 亚洲麻豆一区| 久久福利资源站| 亚洲成人资源网| 亚洲一区亚洲二区| 久热re这里精品视频在线6| 欧美日韩国产欧美日美国产精品| 国产免费亚洲高清| 亚洲精品国精品久久99热| 午夜在线视频观看日韩17c| 男同欧美伦乱| 亚洲午夜黄色| 欧美3dxxxxhd| 国产日韩精品在线| 99国产麻豆精品| 久久色在线观看| 在线视频精品一区| 六十路精品视频| 国产精品手机在线| 亚洲美女视频在线观看| 久久久国产视频91| 一本久道久久久| 蜜桃久久av一区| 国产性天天综合网| 亚洲一级高清| 欧美激情一区二区三区| 亚洲欧美色一区| 欧美日韩亚洲综合一区| 在线不卡中文字幕| 欧美在线播放一区二区| 99国产精品私拍| 欧美xxx成人| 禁久久精品乱码| 欧美一区二区三区男人的天堂| 91久久久久久久久久久久久| 久久蜜桃资源一区二区老牛 | 欧美日韩一区在线视频| 亚洲国产成人av好男人在线观看| 欧美在线播放| 亚洲视频在线观看三级| 欧美日本精品在线| 亚洲精品孕妇| 欧美 日韩 国产精品免费观看| 午夜精品理论片| 国产精品久久久对白| 一区二区三区欧美激情| 亚洲第一久久影院| 久久综合久久综合久久| 韩国福利一区| 久久久亚洲综合| 香蕉久久夜色精品国产使用方法| 国产精品毛片va一区二区三区| 亚洲视频一二| 日韩视频在线播放| 欧美日韩免费一区二区三区视频| 亚洲精选久久| 亚洲国产综合91精品麻豆| 久久伊人精品天天| 一区二区视频免费在线观看| 久久久精彩视频| 欧美在线观看天堂一区二区三区| 国产伦理精品不卡| 欧美在线亚洲| 久久不射中文字幕| 一区二区三区在线视频播放 | 亚洲欧美日韩国产中文在线| 日韩一级精品视频在线观看| 欧美日韩国语| 亚洲综合导航| 亚洲欧美日韩国产成人| 国产亚洲精品久| 久久手机精品视频| 久久久一区二区三区| 亚洲黄色成人久久久| 亚洲国产女人aaa毛片在线| 欧美大片网址| 亚洲一二三区视频在线观看| 在线综合亚洲欧美在线视频| 国产精品区一区二区三| 久久精品亚洲国产奇米99| 久久激情综合网| 亚洲国产一区二区三区青草影视| 欧美激情一级片一区二区| 欧美精品亚洲| 亚洲欧美日韩另类精品一区二区三区 | 国产精品毛片a∨一区二区三区| 亚洲欧美怡红院| 欧美影院成人| 亚洲国产精品第一区二区| 91久久视频| 国产精品家庭影院| 久久久久久欧美| 美女爽到呻吟久久久久| 一区二区三区免费在线观看| 亚洲欧美国产毛片在线| 影音先锋亚洲电影| 亚洲精品久久嫩草网站秘色| 国产精品久久网站| 免费不卡亚洲欧美| 欧美日韩国产成人在线免费| 欧美在线看片| 欧美fxxxxxx另类| 亚洲欧美影院| 理论片一区二区在线| 亚洲午夜性刺激影院| 欧美在线免费观看视频| 亚洲精品孕妇| 香蕉久久国产| 亚洲麻豆视频| 久久99在线观看| 夜夜嗨av一区二区三区四区| 亚洲欧美日韩国产一区二区| 亚洲精品123区| 亚洲一区二区三区在线看 | 欧美一区91| 日韩一区二区福利| 欧美一区二区三区四区视频| 亚洲另类在线一区| 先锋影音网一区二区| 亚洲乱码国产乱码精品精可以看 | 女生裸体视频一区二区三区| 午夜精品久久| 欧美不卡高清| 久久久久国产成人精品亚洲午夜| 欧美精品一区二区蜜臀亚洲| 久久久福利视频| 欧美体内she精视频| 免费欧美视频| 国产精品日韩在线观看| 亚洲国产欧美精品| 一区二区亚洲精品国产| 亚洲午夜精品网| 亚洲精品综合精品自拍| 久久九九精品99国产精品| 亚洲欧美日韩在线播放| 欧美成年网站| 免费国产自线拍一欧美视频| 国产精品自在线| 99re8这里有精品热视频免费 | 麻豆精品网站| 国产欧美日韩中文字幕在线| 日韩亚洲欧美成人| 最新69国产成人精品视频免费| 欧美一区二区三区免费看| 亚洲一区999| 欧美日韩国产综合久久| 亚洲电影中文字幕| 亚洲二区免费| 久久精品一区| 久久久噜久噜久久综合| 国产欧美短视频| 这里只有精品视频在线| 亚洲色在线视频| 欧美片在线观看| 亚洲国产精品一区二区久| 亚洲电影有码| 久久精品一区二区| 久久人91精品久久久久久不卡| 国产欧美日韩一区| 亚洲欧美另类国产| 性久久久久久| 国产女人18毛片水18精品| 亚洲女人av| 久久成人综合网| 国产视频一区三区|