有没有 Objective-c 访问野指针崩溃的兜底方案(即如何避免野指针崩溃)? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
Jihua
V2EX    程序员

有没有 Objective-c 访问野指针崩溃的兜底方案(即如何避免野指针崩溃)?

  •  
      Jihua 2022-06-28 14:26:34 +08:00 2262 次点击
    这是一个创建于 1230 天前的主题,其中的信息可能已经有所发展或是发生改变。

    不是定位野指针崩溃,而是直接避免野指针崩溃。请教下有没有这样的方案,如果有,麻烦附上解决方案。

    12 条回复    2022-06-28 16:07:04 +08:00
    dcty
        1
    dcty  
       2022-06-28 14:29:37 +08:00 via Android
    有时候还不如直接让他崩了,否则业务上可能还要做一些原本不应该做的兼容。
    Jihua
        2
    Jihua  
    OP
       2022-06-28 14:40:58 +08:00
    @dcty 对,一般情况下,应在编码和测试阶段避免野指针;之后收集号线上崩溃日志。

    我这是在准备一道面试题
    dcty
        3
    dcty  
       2022-06-28 14:47:32 +08:00 via Android
    @Jihua 哦,那你搜一下吧,七八年前貌似做过,大概就是在全局异常抛出的时候 handle 住不让它退出这样的处理,具体细节忘记了
    darkengine
        4
    darkengine  
       2022-06-28 14:57:43 +08:00
    NSSetUncaughtExceptionHandler ,这个东西没办法阻止 app 崩,但是可以在崩之前做一些操作例如 logging 或者写文件记录下来之类的。
    ysc3839
        5
    ysc3839  
       2022-06-28 15:04:07 +08:00
    @darkengine 如果要记录日志的话推荐直接用 Google 的 Crashpad https://crashpad.chromium.org/
    xtinput
        6
    xtinput  
       2022-06-28 15:05:06 +08:00
    实现 NSObject 的消息转发能避免一部分,那个指针如果刚好指向一个 NSObject 对象就避免了,否则避免不了了
    icyalala
        7
    icyalala  
       2022-06-28 15:21:11 +08:00
    线上野指针可能会产生各种各样的 signal ,你防不住的
    darkengine
        8
    darkengine  
       2022-06-28 15:39:14 +08:00
    @ysc3839 貌似 iOS 的还没完成哎
    ecloud
        9
    ecloud  
       2022-06-28 15:42:46 +08:00
    oc 本质上就是加了个 rc 的 c ,没有 vm ,你兜不了底的。任何企图兜底的方式也大体上差不多是实现了一定程度 vm 的功能了
    ysc3839
        10
    ysc3839  
       2022-06-28 15:51:37 +08:00
    txx
        11
    txx  
       2022-06-28 15:56:49 +08:00   1
    请用 Swift
    siajia
        12
    siajia  
       2022-06-28 16:07:04 +08:00 via iPhone
    有啊,思路大概是 hook dealloc 然后替换 isa 指针。具体实际应用还有很多细节,加开关针对特定类,缓存机制,上报机制等等,也有缺点,会造成内存延时释放。 找了一篇文章供参考 http://gonghonglou.com/2019/07/06/crash-guard-bad-access/
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2645 人在线   最高记录 6679   &bsp;   Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 09:45 PVG 17:45 LAX 01:45 JFK 04:45
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86