代码之家  ›  专栏  ›  技术社区  ›  Rudedog

如何确定EXC_坏访问的原因

  •  0
  • Rudedog  · 技术社区  · 3 年前

    我正在将项目中的一个整体框架分解成一堆更小的Swift包。这主要是一个将声明移出框架并放入其中一个包的问题,然后更改 import 让我们使用这些软件包。

    我遇到了一个问题,因为我的测试与 Thread 1: EXC_BAD_ACCESS (code=1, address=0x30) .堆栈跟踪如下:

    MyUnitTests`StubNetworkClient.__allocating_init(baseURL:):
        0x111b3b0d4 <+0>:  sub    sp, sp, #0x30             ; =0x30 
        0x111b3b0d8 <+4>:  stp    x20, x19, [sp, #0x10]
        0x111b3b0dc <+8>:  stp    x29, x30, [sp, #0x20]
        0x111b3b0e0 <+12>: add    x29, sp, #0x20            ; =0x20 
        0x111b3b0e4 <+16>: str    x0, [sp, #0x8]
        0x111b3b0e8 <+20>: mov    x0, x20
    ->  0x111b3b0ec <+24>: ldr    w8, [x0, #0x30]
        0x111b3b0f0 <+28>: mov    x1, x8
        0x111b3b0f4 <+32>: ldrh   w8, [x0, #0x34]
        0x111b3b0f8 <+36>: mov    x2, x8
        0x111b3b0fc <+40>: bl     0x111bea0dc               ; symbol stub for: swift_allocObject
        0x111b3b100 <+44>: mov    x20, x0
        0x111b3b104 <+48>: ldr    x0, [sp, #0x8]
        0x111b3b108 <+52>: bl     0x111b3b11c               ; NetworkClientTestSupport.StubNetworkClient.init(baseURL: Foundation.URL) -> NetworkClientTestSupport.StubNetworkClient<C> at StubNetworkClient.swift:98
        0x111b3b10c <+56>: ldp    x29, x30, [sp, #0x20]
        0x111b3b110 <+60>: ldp    x20, x19, [sp, #0x10]
        0x111b3b114 <+64>: add    sp, sp, #0x30             ; =0x30 
        0x111b3b118 <+68>: ret    
    

    如果我读对了,它会说这是在库代码中崩溃,甚至在它进入我的初始值设定项之前。

    对我来说,创建一个最小的测试用例几乎是不可能的,但我希望有人能对我可以做什么来排除故障或解决它提出建议。

    这是针对M1 Macbook Pro上模拟器的Xcode 13.2.1。

    后续行动:

    我从目标和测试目标的链接阶段删除了所有的包,然后一个接一个地重新添加它们,直到它构建,现在它在测试中不会崩溃。所以这是链接器的问题。

    0 回复  |  直到 3 年前