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