How To - LabVIEW建立執行檔時,遇到1502、1055錯誤的可能解決方式

 當建立執行檔時,遇到以下錯誤訊息:

The VI became broken during the build process. Open the Build Specification and enable debugging to include the front panel and block diagrams.

此錯誤代碼為1055,此時系統會提示某個vi,如果該vi並沒有顯示任何編譯錯誤的訊息,會發生這個錯誤,通常是原始程式碼沒有問題,但是該程式碼相依(弱連結)的部分程式內容,在編譯的過程產生錯誤,常見的狀況如下:

  1. 檢查Conditional Disable Structure(CDS),確認程式碼中CDS的條件為RUN_TIME_ENGINE==True的頁面,其內容是否有編輯完成可能出錯的程式區段。當開發時,LabVIEW不會執行及檢察內部的程式碼,但是當編譯時,LabVIEW會檢查該程式碼,如果此部分有問題時,那麼在應用程式的觀點上他是未完成的,故無法正確編譯。遇到此類問題,可以直接移除該部分程式碼後重新編譯,應可解決此問題。
  2. 檢查CDS、Diagram Disable Structure(DDS),其未使用到的頁面,是否有呼叫到特定函式庫、類別,而該函式庫、類別並未撰寫完畢,導致編譯檢查相依性時,因為該相依的函式庫、類別內部的程式碼有誤、未完成,故無法正確編譯。遇到此類問題,可以直接移除該部分程式碼後重新編譯,應可解決此問題。
  3. 檢查有用到VIM的程式碼,是否被加入了密碼保護。此行為會導致VIM在編譯期會無法正確被編譯導致錯誤。
  4. 檢查Dependencies內,是否有載入了未使用且標註為被移除或是找不到的VI,這是來自於一些參照如type def、class等常數被應用在現有專案中,但是該常數被DDS、CDS所遮蔽、而原檔已經遭刪除,此類弱連結很容易導致無法正確編譯。遇到此類問題,可以透過專案find caller等功能尋找該相依物件被呼叫的源頭,並且移除該源頭,應可解決此問題。
  5. 檢查VIPM中有安裝,並且在該專案中應用到的模組,其模組VI是否有安裝在一個很長的路徑,如果路徑過長,可能導致編譯時無法載入路徑過長的VI,導致編譯期錯誤。遇到此類問題,可在專案中重新指定模組存放位置,應可解決此問題。但此行為很容易導致其他專案找不到被遷移後的模組,而導致異常。
  6. 檢查建立執行檔所指定的目錄,如果該目錄位於一個很長的路徑,LabVIEW在建立執行檔之前的檢查作業時,LabVIEW會在該目錄內建立一些檢查用的目錄,之後會將該目錄移至執行檔內,而因為執行檔所在的目錄已經很長,建立後會變得更長,導致生成一個無效的路徑而無法繼續編譯。遇到此類問題,建議直接將build資料夾直接指定於D:\Build,大幅降低資料夾長度,應可解決此問題。
  7. 如果以上描述找過了都無法正確找到問題,那可以在build application property內的Advanced頁面中,勾選第一個項目: Enable debugging後重新編譯,可能可以直接解決問題,或是看到其他錯誤代碼來協助排除。
  8. 此外也可以將1502中所描述的錯誤VI,在build application property內的Source File Settings中,保留block diagram,可能可以排除這個錯誤。
  9. 最後,在build application property內的Additional Exclusions頁面中的所有打勾的項目取消,也就是都不要勾,避免一些相依性被移除後產生錯誤。 
如果終於排除了這些問題,結果系統換跳錯誤代碼1055,LabVIEW: Object reference is invalid.
這多半遇到NI自帶的Bug,此時有兩個可能的解決方式。
  1. 檢查是否有安裝NI DSC Module,如果有安裝,但是這個專案並沒有用到這個模組,請移除他。
  2. 如果不想移除,然後LabVIEW版本剛好是2019~2023Q1之間,那下載這個VI,並且覆蓋LabVIEW原本的VI,可能可以解決這個問題。
    https://forums.ni.com/t5/LabVIEW/Application-builder-error-1055/m-p/4311543#M1260927
如果有其他的解決方式或是排除的workflow,也歡迎讓我知道,我再更新上來。