昨天突然發生了一件非常恐怖的事——我的ue4項目居然不能打包了!!
大概是這么一回事:

眾所周知,程序員除了print111111大法以外,還有一項獨門秘技,叫做二分查錯法。
也就是一段程序有問題但不知道問題在哪里的時候,注釋掉后半段看看還有沒有問題,如果不出錯了說明問題在后半段反之問題在前半段,以此類推,不斷縮小范圍。。。直到找出有問題的行。
二分查錯法的升級版是我獨創的(?)二分優化法,如果游戲出現蜜汁卡頓,(前提是先確定是邏輯線程耗時過長)同樣是先注釋掉一大段代碼,用二分法不斷縮小范圍,直到找到卡頓的代碼行。
然而現在又有升級版了,叫做二分回退大法!可以解決一些非常嚴重但就是找不到原因的問題。
二分回退法和傳統的二分法不同,它是時間上的二分而不是空間的。
首先我們需要有時不時提交到版本控制的好習慣,我用的是微軟的vsonline team foundation service,具體怎么和ue4結合進行源碼管理我以后會單獨寫篇文章介紹。
具體做法就是把項目回退到記憶中可以打包的版本(l表示),然后取當前版本已知不可打包版本(r表示)到當前已知可打包版本的一半(時間上的一半,(l+r)/2)再進行回退,嘗試打包,如果不能打包說明導致不能打包的那次修改的范圍在l~(l+r)/2,否則在(l+r)/2~r。。。
以此類推,最終我發現了changeset 375可以正常打包,而之后的376突然就打包失敗了!!
真相就在眼前!!!
我點開#376,
赫然看到uproject文件多出了一行umgeditor!!!
尼瑪,這不就是前面那個link出錯的umgeditor什么什么lib文件嘛!!!
震驚了,原來是uproject多了這么一行導致打包需要多弄這么個模塊。
於是我又回到了最新版本,把uproject文件用記事本打開,刪掉了umgeditor這行,果然伴隨着清脆的一聲滴,打包成功了!!!
至於為什么會莫名其妙多出這一行呢,原來是我當時試圖添加一個繼承widgetcomponent的c++類,結果沒能添加成功,我也就沒當一回事,沒想到埋下了如此伏筆。
所以這個故事告訴了我們至少3點:
1.如果ue4打包失敗就去檢查一下.uproject文件
2.使用版本控制並經常check in 的好處
3.二分回退大法的妙用