[問題] callback function如何 try catch?

作者: soufon (Google)   2023-01-12 12:06:57
目前程式中會使用到 callback
這個callback 來在別人api
但此api的來源碼要不到
目前發生一觸法callback
即直接掛掉
只能靠core dump看
是參數問題
有辦法用 try catch 避免程式直接掛點嗎
謝謝
作者: CoNsTaR ((const *))   2023-01-12 12:26:00
不懂問題在哪裡,直接用 try catch 包住不行?
作者: soufon (Google)   2023-01-12 12:30:00
callback 的話,無法包住callback 就一個func的定義,無法在定義外包一層try catch,而此func一被觸法就掛了,根本連第一行都沒執行到,參數就掛了
作者: bdvstg (bdvstg)   2023-01-12 12:32:00
被呼叫的跟呼叫的都在別人那?
作者: soufon (Google)   2023-01-12 12:38:00
我這邊有掛載那隻api事件一觸發就會跳進api裡面,api我們這邊有overwrite但掛在一被call的時候,來不及try catch
作者: LPH66 (-6.2598534e+18f)   2023-01-12 12:48:00
callback API 詳細長怎樣?你怎麼判斷是參數問題的?你所發現的「參數問題」又是怎樣的參數才使程式當掉?
作者: soufon (Google)   2023-01-12 12:50:00
core dump: std::invalid_argument 而且callback第一行都還沒執行到就掛外部msg server來的訊息,跟外部要send log 看起來無異常..
作者: LPH66 (-6.2598534e+18f)   2023-01-12 12:56:00
invalid_argument...有種 stoi 失敗的味道在查一下 send log 裡有沒有該是數字的欄位裡沒有數字我會猜這不是你們的 callback 的問題說起來你有 coredump, gdb 進去後是不是停在 stoi 裡?
作者: soufon (Google)   2023-01-12 13:19:00
what () invalid string : float但跟外部要到的send log沒啥問題…
作者: descent (「雄辯是銀,沉默是金」)   2023-01-12 14:45:00
你可以用組合語言的單步執行嗎?可以找到哪行組語有問題
作者: soufon (Google)   2023-01-12 15:03:00
好像無法組語單步執行,km onmessage一call 進來直接exception 掛掉因無法try catch 阻擋掛掉 qq
作者: LPH66 (-6.2598534e+18f)   2023-01-12 20:23:00
果然雖不中也不遠, 這看起來是掛在 stof 裡那既然在進入你的 callback 前就掛了合理懷疑是來的訊息中該是數字的欄位沒有數字, 傳進 stof 就掛了去問你用的這個 API 的作者有沒有什麼地方會有這種問題總之這應該是來的訊息跟它的處理程式的問題和你的 callback 沒有關係噢, 或許 what() 裡冒號後面的就是傳進的字串本身你能掌握到的所發送訊息當中有沒有 float 這種字放在該是數字的欄位當中的?問題源頭應該是來的訊息, 你也可以問一下發送方有沒有可能把字串放進數字欄位裡的可能
作者: soufon (Google)   2023-01-12 22:19:00
問發送方的訊息確實沒錯,不知道是不是 callback 在收的時候記憶體溢出造成參數跑掉嗎?
作者: enthos (影斯作業系統)   2023-01-13 03:48:00
Linux:sigsetjmp()/siglongjmp()Win: nirsoft Preventing application crash by usingexception handling mechanism http://bit.ly/3vVmpnEhttp://bit.ly/3GEjODh Linux recover from SIGSEGVhttps://gist.github.com/Nadrin/1026045 backtrace()
作者: alan23273850   2023-01-13 09:20:00
用 gdb debug 看看吧
作者: soufon (Google)   2023-01-13 12:22:00
感謝en大,我加上了,但還是直接crash,沒有進入我的sig_handler 我參考第三個連結是因為是開thread的關係嗎後來發現註冊後都回傳ignore..設定好了,我再試試目前可抓到segment fault signal

Links booklink

Contact Us: admin [ a t ] ucptt.com