作者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/cn.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