相关疑难解决方法(0)

为什么 LLDB 在 MacOS 上使用用户编译的库生成 EXC_BAD_INSTRUCTION?

我想在 MacOS 上调试 OpenSSL,看看它如何创建椭圆曲线点。因此,我使用调试符号编译了 OpenSSL,但没有进行任何优化。但是,当我运行时lldb,它不起作用

$ cat ec.c
#include <crypto/ec.h>
#include <stdio.h>

int main() {
    EC_GROUP *group = EC_GROUP_new_by_curve_name(NID_secp384r1);
    EC_POINT *point = EC_POINT_new(group);
    printf("done!\n");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

以下是我编译和运行该程序的方式:

$ gcc ec.c -o ec -I../openssl/include ../openssl/libcrypto.dylib  -ggdb3 -O0
$ DYLD_INSERT_LIBRARIES=../openssl/libcrypto.dylib ./ec
done!
Run Code Online (Sandbox Code Playgroud)

这是当我运行 lldb 并尝试在 main 处中断时发生的情况:

$ lldb ./ec
(lldb) process launch --environment DYLD_INSERT_LIBRARIES=../openssl/libcrypto.dylib ./ec
Process 3948 launched: '/Users/seanthomas/repos/ec/ec' (arm64)
Process 3948 stopped
* thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_INSTRUCTION (code=1, subcode=0x4a03000)
    frame #0: 0x00000001009651a8 …
Run Code Online (Sandbox Code Playgroud)

c macos lldb

8
推荐指数
2
解决办法
1634
查看次数

拦截iOS上的崩溃

描述

我想捕获iOS应用程序中发生的所有异常并将它们记录到文件中,并最终将它们发送到应用程序使用的后端服务器.

我一直在阅读有关这个​​主题的内容,并发现设备发送的信号的使用情况并对其进行处理,但我不确定它是否会破坏App Store评论指南,或者它可能会引入其他问题.

我添加了以下内容AppDelegate:

NSSetUncaughtExceptionHandler { (exception) in  
    log.error(exception)  
}  

signal(SIGABRT) { s in  
    log.error(Thread.callStackSymbols.prettified())  
    exit(s)  
}  

signal(SIGILL) { s in  
    log.error(Thread.callStackSymbols.prettified())  
    exit(s)  
}  

signal(SIGSEGV) { s in  
    log.error(Thread.callStackSymbols.prettified())  
    exit(s)  
}
Run Code Online (Sandbox Code Playgroud)

问题

  • 这是一种好方法,还是其他方式吗?
  • 它会因使用而破坏App Store评论指南吗? exit()
  • 是否更好用kill(getpid(), SIGKILL)而不是exit()

资源

logging ios swift

3
推荐指数
2
解决办法
666
查看次数

标签 统计

c ×1

ios ×1

lldb ×1

logging ×1

macos ×1

swift ×1