五十一、UDF錯(cuò)誤代碼排查

1.UDF錯(cuò)誤代碼排查

UDF出錯(cuò)如何進(jìn)行錯(cuò)誤排查???

 

五十一、UDF錯(cuò)誤代碼排查的圖1

1.1有錯(cuò)誤信息顯示

根據(jù)錯(cuò)誤信息定位到具體錯(cuò)誤類型,如代碼錯(cuò)誤、命名錯(cuò)誤、內(nèi)存分配錯(cuò)誤或線程錯(cuò)誤等問題。詳細(xì)可查看五十、UDF常見錯(cuò)誤及報(bào)錯(cuò)信息

五十一、UDF錯(cuò)誤代碼排查的圖2

1.2無錯(cuò)誤信息顯示

常見問題介紹了很多有錯(cuò)誤信息的UDF問題,這類問題一般比較容易定位錯(cuò)誤,能夠更容易的解決。

但是還存在一類build之后沒有任何錯(cuò)誤信息的代碼,編譯能正常編譯,但是只要calculation或者初始化就會(huì)出錯(cuò),這類問題如果實(shí)在找不到問題,那就進(jìn)行逐句排查。

 

2.排查舉例

比如一個(gè)曾經(jīng)困擾我一整天的問題:

 

五十一、UDF錯(cuò)誤代碼排查的圖3

以上代碼看起來沒有任何問題,導(dǎo)入Fluent,編譯之后報(bào)錯(cuò),出現(xiàn)以下錯(cuò)誤信息

 

五十一、UDF錯(cuò)誤代碼排查的圖4

顯示第一行出錯(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。

 

五十一、UDF錯(cuò)誤代碼排查的圖5

點(diǎn)擊build之后,控制臺出現(xiàn)界面如下,沒有報(bào)錯(cuò)。

 

五十一、UDF錯(cuò)誤代碼排查的圖6

 

然后依次還原各行代碼,對于比較簡單的代碼,不需要驗(yàn)證可直接還原。將前三句代碼還原

五十一、UDF錯(cuò)誤代碼排查的圖7

點(diǎn)擊build,出現(xiàn)如下信息,沒有報(bào)錯(cuò)。

 

五十一、UDF錯(cuò)誤代碼排查的圖8

 

再次還原代碼

 

五十一、UDF錯(cuò)誤代碼排查的圖9

點(diǎn)擊build之后,又出現(xiàn)報(bào)錯(cuò)信息

 

五十一、UDF錯(cuò)誤代碼排查的圖10

由此我們可以定位到錯(cuò)誤代碼

 

五十一、UDF錯(cuò)誤代碼排查的圖11

到底哪里有問題呢??

經(jīng)過我反復(fù)實(shí)驗(yàn),原來是注釋出了問題。C語言有兩種注釋方法//和/*.......*/。這一行的注釋//*0.8.........乘以0.8的*被C語言認(rèn)為是注釋語句,因此兩種注釋疊用,導(dǎo)致出錯(cuò)。只要將*去掉就可以。

 

五十一、UDF錯(cuò)誤代碼排查的圖12

 

上面的例子只是為了做一下示范,實(shí)際上的UDF代碼更加復(fù)雜,問題也更加多樣。如果通過錯(cuò)誤提示或者經(jīng)驗(yàn)都找不到錯(cuò)誤,使用這種方式雖然繁瑣,但基本是通用的,幾乎所有的問題代碼都能找到。

 

 

為了方便大家學(xué)習(xí)交流,我創(chuàng)建了QQ群:群一人數(shù)已滿員,可加二群:876525686,大家可以在其中討論相關(guān)的問題,同時(shí)我會(huì)將所有文章的源文件都放到QQ群中,還會(huì)放一些其它的學(xué)習(xí)文件。歡迎大家加入。

登錄后免費(fèi)查看全文
立即登錄
App下載
技術(shù)鄰APP
工程師必備
  • 項(xiàng)目客服
  • 培訓(xùn)客服
  • 平臺客服

TOP

1