看板 C_and_CPP 關於我們 聯絡資訊
目前程式中會使用到 callback 這個callback 來在別人api 但此api的來源碼要不到 目前發生一觸法callback 即直接掛掉 只能靠core dump看 是參數問題 有辦法用 try catch 避免程式直接掛點嗎 謝謝 ---- Sent from BePTT on my iPhone 12 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 49.216.162.40 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1673496419.A.6B2.html
CoNsTaR: 不懂問題在哪裡,直接用 try catch 包住不行? 01/12 12:26
soufon: callback 的話,無法包住 01/12 12:30
soufon: callback 就一個func的定義,無法在定義外包一層try cat 01/12 12:32
soufon: ch,而此func一被觸法就掛了,根本連第一行都沒執行到, 01/12 12:32
soufon: 參數就掛了 01/12 12:32
bdvstg: 被呼叫的跟呼叫的都在別人那? 01/12 12:32
soufon: 我這邊有掛載那隻api 01/12 12:38
soufon: 事件一觸發就會跳進api裡面,api我們這邊有overwrite但掛 01/12 12:39
soufon: 在一被call的時候,來不及try catch 01/12 12:39
LPH66: callback API 詳細長怎樣? 01/12 12:48
LPH66: 你怎麼判斷是參數問題的? 01/12 12:49
LPH66: 你所發現的「參數問題」又是怎樣的參數才使程式當掉? 01/12 12:50
soufon: core dump: std::invalid_argument 而且callback第一行都 01/12 12:50
soufon: 還沒執行到就掛 01/12 12:50
soufon: 外部msg server來的訊息,跟外部要send log 看起來無異常 01/12 12:51
soufon: .. 01/12 12:51
LPH66: invalid_argument...有種 stoi 失敗的味道在 01/12 12:56
LPH66: 查一下 send log 裡有沒有該是數字的欄位裡沒有數字 01/12 12:57
LPH66: 我會猜這不是你們的 callback 的問題 01/12 12:57
LPH66: 說起來你有 coredump, gdb 進去後是不是停在 stoi 裡? 01/12 13:00
soufon: what () invalid string : float 01/12 13:19
soufon: 但跟外部要到的send log沒啥問題… 01/12 13:19
descent: 你可以用組合語言的單步執行嗎?可以找到哪行組語有問題 01/12 14:45
soufon: 好像無法組語單步執行,km onmessage一call 進來直接exc 01/12 15:03
soufon: eption 掛掉 01/12 15:03
soufon: 因無法try catch 阻擋掛掉 qq 01/12 15:03
LPH66: 果然雖不中也不遠, 這看起來是掛在 stof 裡 01/12 20:23
LPH66: 那既然在進入你的 callback 前就掛了合理懷疑是來的訊息中 01/12 20:24
LPH66: 該是數字的欄位沒有數字, 傳進 stof 就掛了 01/12 20:24
LPH66: 去問你用的這個 API 的作者有沒有什麼地方會有這種問題 01/12 20:24
LPH66: 總之這應該是來的訊息跟它的處理程式的問題 01/12 20:25
LPH66: 和你的 callback 沒有關係 01/12 20:25
LPH66: 噢, 或許 what() 裡冒號後面的就是傳進的字串本身 01/12 20:26
LPH66: 你能掌握到的所發送訊息當中有沒有 float 這種字放在 01/12 20:27
LPH66: 該是數字的欄位當中的? 01/12 20:27
LPH66: 問題源頭應該是來的訊息, 你也可以問一下發送方 01/12 20:27
LPH66: 有沒有可能把字串放進數字欄位裡的可能 01/12 20:27
soufon: 問發送方的訊息確實沒錯,不知道是不是 callback 在收的 01/12 22:19
soufon: 時候記憶體溢出造成參數跑掉嗎? 01/12 22:19
enthos: Linux:sigsetjmp()/siglongjmp() 01/13 03:48
enthos: Win: nirsoft Preventing application crash by using 01/13 03:48
enthos: exception handling mechanism http://bit.ly/3vVmpnE 01/13 03:48
enthos: http://bit.ly/3GEjODh Linux recover from SIGSEGV 01/13 03:52
enthos: https://gist.github.com/Nadrin/1026045 backtrace() 01/13 03:54
alan23273850: 用 gdb debug 看看吧 01/13 09:20
soufon: 感謝en大,我加上了,但還是直接crash,沒有進入我的sig 01/13 12:22
soufon: _handler 我參考第三個連結 01/13 12:22
soufon: 是因為是開thread的關係嗎 01/13 12:25
soufon: 後來發現註冊後都回傳ignore.. 01/13 13:57
soufon: 設定好了,我再試試 01/13 15:22
soufon: 目前可抓到segment fault signal 01/13 15:22