五十一、UDF錯(cuò)誤代碼排查
1.UDF錯(cuò)誤代碼排查
UDF出錯(cuò)如何進(jìn)行錯(cuò)誤排查???
1.1有錯(cuò)誤信息顯示
根據(jù)錯(cuò)誤信息定位到具體錯(cuò)誤類型,如代碼錯(cuò)誤、命名錯(cuò)誤、內(nèi)存分配錯(cuò)誤或線程錯(cuò)誤等問題。詳細(xì)可查看五十、UDF常見錯(cuò)誤及報(bào)錯(cuò)信息
1.2無錯(cuò)誤信息顯示
常見問題介紹了很多有錯(cuò)誤信息的UDF問題,這類問題一般比較容易定位錯(cuò)誤,能夠更容易的解決。
但是還存在一類build之后沒有任何錯(cuò)誤信息的代碼,編譯能正常編譯,但是只要calculation或者初始化就會(huì)出錯(cuò),這類問題如果實(shí)在找不到問題,那就進(jìn)行逐句排查。
2.排查舉例
比如一個(gè)曾經(jīng)困擾我一整天的問題:
以上代碼看起來沒有任何問題,導(dǎo)入Fluent,編譯之后報(bào)錯(cuò),出現(xiàn)以下錯(cuò)誤信息
顯示第一行出錯(cuò),但是第一行確實(shí)沒有任何問題。到底哪里有問題呢??你能不能看出來??
雖然這個(gè)例子有錯(cuò)誤信息,但是這個(gè)錯(cuò)誤信息卻是一種誤導(dǎo)。如果真想找到問題應(yīng)該怎么做??
首先把DEFINE宏{}內(nèi)所有的代碼行全部刪除或注釋掉,再次編譯,查看是否有錯(cuò)誤信息。如果是點(diǎn)擊calculation才會(huì)出錯(cuò)的,則需要?jiǎng)h除代碼后點(diǎn)擊calculation。
點(diǎn)擊build之后,控制臺出現(xiàn)界面如下,沒有報(bào)錯(cuò)。
然后依次還原各行代碼,對于比較簡單的代碼,不需要驗(yàn)證可直接還原。將前三句代碼還原
點(diǎn)擊build,出現(xiàn)如下信息,沒有報(bào)錯(cuò)。
再次還原代碼
點(diǎn)擊build之后,又出現(xiàn)報(bào)錯(cuò)信息
由此我們可以定位到錯(cuò)誤代碼
到底哪里有問題呢??
經(jīng)過我反復(fù)實(shí)驗(yàn),原來是注釋出了問題。C語言有兩種注釋方法//和/*.......*/。這一行的注釋//*0.8.........乘以0.8的*被C語言認(rèn)為是注釋語句,因此兩種注釋疊用,導(dǎo)致出錯(cuò)。只要將*去掉就可以。
上面的例子只是為了做一下示范,實(shí)際上的UDF代碼更加復(fù)雜,問題也更加多樣。如果通過錯(cuò)誤提示或者經(jīng)驗(yàn)都找不到錯(cuò)誤,使用這種方式雖然繁瑣,但基本是通用的,幾乎所有的問題代碼都能找到。
為了方便大家學(xué)習(xí)交流,我創(chuàng)建了QQ群:群一人數(shù)已滿員,可加二群:876525686,大家可以在其中討論相關(guān)的問題,同時(shí)我會(huì)將所有文章的源文件都放到QQ群中,還會(huì)放一些其它的學(xué)習(xí)文件。歡迎大家加入。
工程師必備
- 項(xiàng)目客服
- 培訓(xùn)客服
- 平臺客服
TOP




















