# 应用在6.0版本系统上启动时发生闪退，5.0版本启动正常

#### 问题现象

应用在6.0的系统版本上启动闪退，在5.0的系统版本上启动正常。

#### 背景知识

1.  ptrace(process trace)允许一个进程观察和控制另一个进程的执行。
2.  ptrace反调试的核心是通过设置进程的追踪者(tracer)为自身进程，从而阻止其他调试器附加，因为系统限制每个进程只能有一个调试器附加。
3.  在6.0的系统版本上，限制ptrace接口仅可在开发者调试模式下使用。
4.  SIGABRT信号表示进程异常终止，通常为进程自身调用标准函数库的abort()函数。

#### 问题定位

1.  查看faultlogger目录下的崩溃日志，异常信号是SIGABRT，从堆栈信息可以看出应用是因为libohosdrisklib.so库调用exit函数退出的。
    
    ```
    Process name:应用包名
    Process life time:8s
    Process Memory(kB): 266919(Rss)
    Device Memory(kB): Total 11690364, Free 999636, Available 3753984
    Reason:Signal:SIGABRT(SI_TKILL)@0x01317d0d000024d2 from:9426:20020493
    LastFatalMessage:[appspawn_server.c:61]Unexpected call: exit(0)
    Fault thread info:
    Tid:9579, Name:应用包名后缀
    #00 pc 00000000001a2f14 /system/lib/ld-musl-aarch64.so.1(raise+216)(028acccfd609e1a349b61b0ca661fd38)
    #01 pc 000000000014f3f8 /system/lib/ld-musl-aarch64.so.1(abort+24)(028acccfd609e1a349b61b0ca661fd38)
    #02 pc 0000000000001a7c /system/lib64/libappspawn_helper.z.so(exit+144)(517365fff3f2e99f1a9275002b0b78f6)
    #03 pc 000000000000a36c /data/storage/el1/bundle/libs/arm64/libohosdrisklib.so(79bf68877a79cc39c06b698819ea6b3ebf2cd7bd)
    #04 pc 00000000001c2fc0 /system/lib/ld-musl-aarch64.so.1(start+240)(028acccfd609e1a349b61b0ca661fd38)
    ```
    
2.  使用5.0系统版本的设备进行测试，应用能正常启动，不会发生闪退。
3.  排查故障so库是否调用了ptrace接口，ptrace接口在6.0的系统版本上仅可在开发者调试模式下使用。

#### 分析结论

6.0的系统版本为了保障安全隐私限制了ptrace接口使用，导致应用启动闪退。

#### 修改建议

在6.0系统版本中，不再需要通过ptrace接口将当前进程设为自身的追踪者，从而阻止其他进程调试当前进程，因此可以移除对ptrace接口的使用。