ios - Objective C,在堆栈跟踪中不涉及我的应用程序时处理崩溃报告

标签 ios objective-c macos exc-bad-access crash-reports

应用程序可以通过多种方式捕获崩溃。在大多数类型中,IDE 提供的信息已经足够了。 (Xcode & iOS/OS X 开发) 但是有一些崩溃报告为我们提供了崩溃的线程及其堆栈跟踪(像往常一样),但其中没有一帧指向来 self 们应用程序的任何调用!那里涉及本地库。

谁能分享他/她自己修复此类错误的经验以及现有的崩溃报告?

非常感谢!

更新: 我熟悉以下文档:Crash Report (TN2123) , 翻看了 function calling conventions ,开始Mac OS X Debugging Magic (TN2124) 。 但还没有成功。
UPD2,堆栈跟踪:

Process:               My Application [5708]
Path:                  /Applications/My Application.app/Contents/MacOS/My Application
Identifier:            com.MyApplication
Version:               1.0 (0)
Code Type:             X86-64 (Native)
Parent Process:        ??? [1]
Responsible:           My Application [5708]
User ID:               10001

Date/Time:             2015-05-05 18:30:02.782 +0300
OS Version:            Mac OS X 10.10.1 (14B25)
Report Version:        11
Anonymous UUID:        FE6D3DC3-9F32-246F-B1FD-5884D8CABA62

Sleep/Wake UUID:       7B4B18F9-E17D-48CA-AB36-0C75F236A14F

Time Awake Since Boot: 9000 seconds
Time Since Wake:       5700 seconds

Crashed Thread:        3  Dispatch queue: com.apple.videotoolbox.preparationQueue

Exception Type:        EXC_BAD_ACCESS (SIGSEGV)
Exception Codes:       KERN_INVALID_ADDRESS at 0x000000011ccce000

VM Regions Near 0x11ccce000:
    IOKit                  000000011cc5a000-000000011ccce000 [  464K] rw-/rw- SM=SHM
-->
    IOKit                  000000011d04f000-000000011d0fd000 [  696K] rw-/rw- SM=SHM

Thread 0:: Dispatch queue: com.apple.main-thread
0   libsystem_kernel.dylib          0x00007fff87e6152e mach_msg_trap + 10
1   libsystem_kernel.dylib          0x00007fff87e6069f mach_msg + 55
2   com.apple.CoreFoundation        0x00007fff8a1bfb14 __CFRunLoopServiceMachPort + 212
3   com.apple.CoreFoundation        0x00007fff8a1befdb __CFRunLoopRun + 1371
4   com.apple.CoreFoundation        0x00007fff8a1be838 CFRunLoopRunSpecific + 296
5   com.apple.HIToolbox             0x00007fff8c28a43f RunCurrentEventLoopInMode + 235
6   com.apple.HIToolbox             0x00007fff8c28a1ba ReceiveNextEventCommon + 431
7   com.apple.HIToolbox             0x00007fff8c289ffb _BlockUntilNextEventMatchingListInModeWithFilter + 71
8   com.apple.AppKit                0x00007fff84b0a6d1 _DPSNextEvent + 964
9   com.apple.AppKit                0x00007fff84b09e80 -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] + 194
10  com.apple.AppKit                0x00007fff84afde23 -[NSApplication run] + 594
11  com.apple.AppKit                0x00007fff84ae92d4 NSApplicationMain + 1832
12  com.MyApplication               0x0000000104eac864 start + 52

Thread 1:: Dispatch queue: com.apple.libdispatch-manager
0   libsystem_kernel.dylib          0x00007fff87e6722e kevent64 + 10
1   libdispatch.dylib               0x00007fff92e85a6a _dispatch_mgr_thread + 52

Thread 2:
0   libsystem_kernel.dylib          0x00007fff87e66946 __workq_kernreturn + 10
1   libsystem_pthread.dylib         0x00007fff8cbca4a1 start_wqthread + 13

Thread 3 Crashed:: Dispatch queue: com.apple.videotoolbox.preparationQueue
0   com.apple.VideoToolbox          0x00007fff92ee10e5 0x7fff92eac000 + 217317
1   com.apple.VideoToolbox          0x00007fff92ec324b VTPixelTransferSessionTransferImage + 13362
2   com.apple.VideoToolbox          0x00007fff92eb40e7 0x7fff92eac000 + 32999
3   libdispatch.dylib               0x00007fff92e82c13 _dispatch_client_callout + 8
4   libdispatch.dylib               0x00007fff92e86365 _dispatch_queue_drain + 1100
5   libdispatch.dylib               0x00007fff92e87ecc _dispatch_queue_invoke + 202
6   libdispatch.dylib               0x00007fff92e856b7 _dispatch_root_queue_drain + 463
7   libdispatch.dylib               0x00007fff92e93fe4 _dispatch_worker_thread3 + 91
8   libsystem_pthread.dylib         0x00007fff8cbcc6cb _pthread_wqthread + 729
9   libsystem_pthread.dylib         0x00007fff8cbca4a1 start_wqthread + 13

Thread 4:
0   libsystem_kernel.dylib          0x00007fff87e6152e mach_msg_trap + 10
1   libsystem_kernel.dylib          0x00007fff87e6069f mach_msg + 55
2   com.apple.CoreFoundation        0x00007fff8a1bfb14 __CFRunLoopServiceMachPort + 212
3   com.apple.CoreFoundation        0x00007fff8a1befdb __CFRunLoopRun + 1371
4   com.apple.CoreFoundation        0x00007fff8a1be838 CFRunLoopRunSpecific + 296
5   com.apple.AppKit                0x00007fff84c6d7a7 _NSEventThread + 137
6   libsystem_pthread.dylib         0x00007fff8cbcc2fc _pthread_body + 131
7   libsystem_pthread.dylib         0x00007fff8cbcc279 _pthread_start + 176
8   libsystem_pthread.dylib         0x00007fff8cbca4b1 thread_start + 13

Thread 5:
0   libsystem_kernel.dylib          0x00007fff87e66946 __workq_kernreturn + 10
1   libsystem_pthread.dylib         0x00007fff8cbca4a1 start_wqthread + 13

Thread 6:: com.apple.NSURLConnectionLoader
0   libsystem_kernel.dylib          0x00007fff87e6152e mach_msg_trap + 10
1   libsystem_kernel.dylib          0x00007fff87e6069f mach_msg + 55
2   com.apple.CoreFoundation        0x00007fff8a1bfb14 __CFRunLoopServiceMachPort + 212
3   com.apple.CoreFoundation        0x00007fff8a1befdb __CFRunLoopRun + 1371
4   com.apple.CoreFoundation        0x00007fff8a1be838 CFRunLoopRunSpecific + 296
5   com.apple.CFNetwork             0x00007fff8465bd20 +[NSURLConnection(Loader) _resourceLoadLoop:] + 434
6   com.apple.Foundation            0x00007fff842ecb7a __NSThread__main__ + 1345
7   libsystem_pthread.dylib         0x00007fff8cbcc2fc _pthread_body + 131
8   libsystem_pthread.dylib         0x00007fff8cbcc279 _pthread_start + 176
9   libsystem_pthread.dylib         0x00007fff8cbca4b1 thread_start + 13

Thread 7:: com.apple.CFSocket.private
0   libsystem_kernel.dylib          0x00007fff87e663f6 __select + 10
1   libsystem_pthread.dylib         0x00007fff8cbcc2fc _pthread_body + 131
2   libsystem_pthread.dylib         0x00007fff8cbcc279 _pthread_start + 176
3   libsystem_pthread.dylib         0x00007fff8cbca4b1 thread_start + 13

Thread 8:: CVDisplayLink
0   libsystem_kernel.dylib          0x00007fff87e66132 __psynch_cvwait + 10
1   com.apple.CoreVideo             0x00007fff8d424ff8 CVDisplayLink::waitUntil(unsigned long long) + 240
2   com.apple.CoreVideo             0x00007fff8d4244b3 CVDisplayLink::runIOThread() + 511
3   com.apple.CoreVideo             0x00007fff8d42429b startIOThread(void*) + 147
4   libsystem_pthread.dylib         0x00007fff8cbcc2fc _pthread_body + 131
5   libsystem_pthread.dylib         0x00007fff8cbcc279 _pthread_start + 176
6   libsystem_pthread.dylib         0x00007fff8cbca4b1 thread_start + 13

Thread 9:
0   libsystem_kernel.dylib          0x00007fff87e66946 __workq_kernreturn + 10
1   libsystem_pthread.dylib         0x00007fff8cbca4a1 start_wqthread + 13

Thread 10:
0   libsystem_kernel.dylib          0x00007fff87e6152e mach_msg_trap + 10
1   libsystem_kernel.dylib          0x00007fff87e6069f mach_msg + 55
2   com.apple.CoreFoundation        0x00007fff8a1bfb14 __CFRunLoopServiceMachPort + 212
3   com.apple.CoreFoundation        0x00007fff8a1befdb __CFRunLoopRun + 1371
4   com.apple.CoreFoundation        0x00007fff8a1be838 CFRunLoopRunSpecific + 296
5   com.apple.CoreFoundation        0x00007fff8a274ed1 CFRunLoopRun + 97
6   com.blackmagic-design.desktopvideo.DeckLinkAPI  0x000000010d39b82e DeckLinkDeviceNotificationControlMac::MessageLoop() + 176
7   com.blackmagic-design.desktopvideo.DeckLinkAPI  0x000000010d39b3ad DeviceNotificationController::MessageLoopFunc(void*) + 15
8   libsystem_pthread.dylib         0x00007fff8cbcc2fc _pthread_body + 131
9   libsystem_pthread.dylib         0x00007fff8cbcc279 _pthread_start + 176
10  libsystem_pthread.dylib         0x00007fff8cbca4b1 thread_start + 13

Thread 11:
0   libsystem_kernel.dylib          0x00007fff87e6152e mach_msg_trap + 10
1   libsystem_kernel.dylib          0x00007fff87e6069f mach_msg + 55
2   com.apple.framework.IOKit       0x00007fff8fb4b23a io_connect_method + 381
3   com.apple.framework.IOKit       0x00007fff8faef532 IOConnectCallScalarMethod + 111
4   com.blackmagic-design.desktopvideo.DeckLinkAPI  0x000000010d3f469f Nativeproxy::writeScalarReadScalar(int, unsigned long long const*, unsigned int, unsigned long long*, unsigned int) + 39
5   com.blackmagic-design.desktopvideo.DeckLinkAPI  0x000000010d3edc53 WaitForNotificationEvents + 94
6   com.blackmagic-design.desktopvideo.DeckLinkAPI  0x000000010d368db8 CDeckLinkNotification::run() + 102
7   com.blackmagic-design.desktopvideo.DeckLinkAPI  0x000000010d368e7a thread_entry(void*) + 9
8   libsystem_pthread.dylib         0x00007fff8cbcc2fc _pthread_body + 131
9   libsystem_pthread.dylib         0x00007fff8cbcc279 _pthread_start + 176
10  libsystem_pthread.dylib         0x00007fff8cbca4b1 thread_start + 13

Thread 12:
0   libsystem_kernel.dylib          0x00007fff87e6152e mach_msg_trap + 10
1   libsystem_kernel.dylib          0x00007fff87e6069f mach_msg + 55
2   com.apple.CoreFoundation        0x00007fff8a1bfb14 __CFRunLoopServiceMachPort + 212
3   com.apple.CoreFoundation        0x00007fff8a1befdb __CFRunLoopRun + 1371
4   com.apple.CoreFoundation        0x00007fff8a1be838 CFRunLoopRunSpecific + 296
5   com.apple.CoreFoundation        0x00007fff8a274ed1 CFRunLoopRun + 97
6   com.blackmagic-design.desktopvideo.DeckLinkAPI  0x000000010d39b82e DeckLinkDeviceNotificationControlMac::MessageLoop() + 176
7   com.blackmagic-design.desktopvideo.DeckLinkAPI  0x000000010d39b3ad DeviceNotificationController::MessageLoopFunc(void*) + 15
8   libsystem_pthread.dylib         0x00007fff8cbcc2fc _pthread_body + 131
9   libsystem_pthread.dylib         0x00007fff8cbcc279 _pthread_start + 176
10  libsystem_pthread.dylib         0x00007fff8cbca4b1 thread_start + 13

Thread 13:
0   libsystem_kernel.dylib          0x00007fff87e6152e mach_msg_trap + 10
1   libsystem_kernel.dylib          0x00007fff87e6069f mach_msg + 55
2   com.apple.framework.IOKit       0x00007fff8fb4b23a io_connect_method + 381
3   com.apple.framework.IOKit       0x00007fff8faef532 IOConnectCallScalarMethod + 111
4   com.blackmagic-design.desktopvideo.DeckLinkAPI  0x000000010d3f469f Nativeproxy::writeScalarReadScalar(int, unsigned long long const*, unsigned int, unsigned long long*, unsigned int) + 39
5   com.blackmagic-design.desktopvideo.DeckLinkAPI  0x000000010d3edc53 WaitForNotificationEvents + 94
6   com.blackmagic-design.desktopvideo.DeckLinkAPI  0x000000010d368db8 CDeckLinkNotification::run() + 102
7   com.blackmagic-design.desktopvideo.DeckLinkAPI  0x000000010d368e7a thread_entry(void*) + 9
8   libsystem_pthread.dylib         0x00007fff8cbcc2fc _pthread_body + 131
9   libsystem_pthread.dylib         0x00007fff8cbcc279 _pthread_start + 176
10  libsystem_pthread.dylib         0x00007fff8cbca4b1 thread_start + 13

Thread 14:
0   libsystem_kernel.dylib          0x00007fff87e6152e mach_msg_trap + 10
1   libsystem_kernel.dylib          0x00007fff87e6069f mach_msg + 55
2   com.apple.framework.IOKit       0x00007fff8fb4b23a io_connect_method + 381
3   com.apple.framework.IOKit       0x00007fff8faef532 IOConnectCallScalarMethod + 111
4   com.blackmagic-design.desktopvideo.DeckLinkAPI  0x000000010d3f469f Nativeproxy::writeScalarReadScalar(int, unsigned long long const*, unsigned int, unsigned long long*, unsigned int) + 39
5   com.blackmagic-design.desktopvideo.DeckLinkAPI  0x000000010d3edc53 WaitForNotificationEvents + 94
6   com.blackmagic-design.desktopvideo.DeckLinkAPI  0x000000010d38ab81 CDeckLinkOutput::DriverNotificationThread() + 119
7   com.blackmagic-design.desktopvideo.DeckLinkAPI  0x000000010d3879bd CDeckLinkOutput::DriverNotificationThreadFunction(void*) + 9
8   libsystem_pthread.dylib         0x00007fff8cbcc2fc _pthread_body + 131
9   libsystem_pthread.dylib         0x00007fff8cbcc279 _pthread_start + 176
10  libsystem_pthread.dylib         0x00007fff8cbca4b1 thread_start + 13

Thread 15:
0   libsystem_kernel.dylib          0x00007fff87e6152e mach_msg_trap + 10
1   libsystem_kernel.dylib          0x00007fff87e6069f mach_msg + 55
2   com.apple.framework.IOKit       0x00007fff8fb4b23a io_connect_method + 381
3   com.apple.framework.IOKit       0x00007fff8faef532 IOConnectCallScalarMethod + 111
4   com.blackmagic-design.desktopvideo.DeckLinkAPI  0x000000010d3ee507 WaitForVideoOutputPreviewEvent + 51
5   com.blackmagic-design.desktopvideo.DeckLinkAPI  0x000000010d38a427 CDeckLinkOutput::VideoPreviewThread(PreviewThreadArgs*) + 103
6   com.blackmagic-design.desktopvideo.DeckLinkAPI  0x000000010d3882e0 CDeckLinkOutput::VideoPreviewThreadFunction(void*) + 18
7   libsystem_pthread.dylib         0x00007fff8cbcc2fc _pthread_body + 131
8   libsystem_pthread.dylib         0x00007fff8cbcc279 _pthread_start + 176
9   libsystem_pthread.dylib         0x00007fff8cbca4b1 thread_start + 13

Thread 16:
0   libsystem_kernel.dylib          0x00007fff87e6152e mach_msg_trap + 10
1   libsystem_kernel.dylib          0x00007fff87e6069f mach_msg + 55
2   com.apple.CoreFoundation        0x00007fff8a1bfb14 __CFRunLoopServiceMachPort + 212
3   com.apple.CoreFoundation        0x00007fff8a1befdb __CFRunLoopRun + 1371
4   com.apple.CoreFoundation        0x00007fff8a1be838 CFRunLoopRunSpecific + 296
5   com.apple.CoreFoundation        0x00007fff8a274ed1 CFRunLoopRun + 97
6   com.blackmagic-design.desktopvideo.DeckLinkAPI  0x000000010d37263f CDeckLink::DriverNotificationThreadFunction(void*) + 89
7   libsystem_pthread.dylib         0x00007fff8cbcc2fc _pthread_body + 131
8   libsystem_pthread.dylib         0x00007fff8cbcc279 _pthread_start + 176
9   libsystem_pthread.dylib         0x00007fff8cbca4b1 thread_start + 13

Thread 17:: com.apple.coremedia.mediaprocessor.videocompression
0   libsystem_kernel.dylib          0x00007fff87e66162 __psynch_mutexwait + 10
1   com.apple.VideoToolbox          0x00007fff92eb087b VTCompressionSessionEncodeFrame + 378
2   com.apple.MediaToolbox          0x00007fff8bc4f12e 0x7fff8ba3f000 + 2162990
3   com.apple.MediaToolbox          0x00007fff8bc26cd9 0x7fff8ba3f000 + 1998041
4   com.apple.MediaToolbox          0x00007fff8bc2693f 0x7fff8ba3f000 + 1997119
5   com.apple.MediaToolbox          0x00007fff8bc1b367 0x7fff8ba3f000 + 1950567
6   com.apple.CoreMedia             0x00007fff90a217b5 figThreadMain + 417
7   libsystem_pthread.dylib         0x00007fff8cbcc2fc _pthread_body + 131
8   libsystem_pthread.dylib         0x00007fff8cbcc279 _pthread_start + 176
9   libsystem_pthread.dylib         0x00007fff8cbca4b1 thread_start + 13

Thread 18:: com.apple.coremedia.mediaprocessor.audiocompression
0   libsystem_kernel.dylib          0x00007fff87e66132 __psynch_cvwait + 10
1   com.apple.CoreMedia             0x00007fff90a20d31 WaitOnCondition + 11
2   com.apple.CoreMedia             0x00007fff90a20b3e FigSemaphoreWaitRelative + 156
3   com.apple.MediaToolbox          0x00007fff8bc1b343 0x7fff8ba3f000 + 1950531
4   com.apple.CoreMedia             0x00007fff90a217b5 figThreadMain + 417
5   libsystem_pthread.dylib         0x00007fff8cbcc2fc _pthread_body + 131
6   libsystem_pthread.dylib         0x00007fff8cbcc279 _pthread_start + 176
7   libsystem_pthread.dylib         0x00007fff8cbca4b1 thread_start + 13

Thread 19:
0   libsystem_kernel.dylib          0x00007fff87e6152e mach_msg_trap + 10
1   libsystem_kernel.dylib          0x00007fff87e6069f mach_msg + 55
2   com.apple.framework.IOKit       0x00007fff8fb4b23a io_connect_method + 381
3   com.apple.framework.IOKit       0x00007fff8faef532 IOConnectCallScalarMethod + 111
4   com.apple.IOAccelerator         0x00007fff8ca1d449 IOAccelContextFinishFenceEvent + 42
5   com.apple.AppleIntelHD4000GraphicsVADriver  0x000000010ecc2732 0x10ecb0000 + 75570
6   com.apple.AppleIntelHD4000GraphicsVADriver  0x000000010ecdd6ca 0x10ecb0000 + 186058
7   com.apple.AppleGVAFramework     0x000000010e8ba4ab 0x10e81d000 + 644267
8   com.apple.AppleGVAFramework     0x000000010e8ba150 0x10e81d000 + 643408
9   com.apple.AppleGVAFramework     0x000000010e8baf74 0x10e81d000 + 647028
10  com.apple.AppleGVAFramework     0x000000010e8bbe2b 0x10e81d000 + 650795
11  libsystem_pthread.dylib         0x00007fff8cbcc2fc _pthread_body + 131
12  libsystem_pthread.dylib         0x00007fff8cbcc279 _pthread_start + 176
13  libsystem_pthread.dylib         0x00007fff8cbca4b1 thread_start + 13

Thread 20:: com.apple.coremedia.formatwriter.qtmovie
0   libsystem_kernel.dylib          0x00007fff87e67636 pwrite + 10
1   com.apple.CoreMedia             0x00007fff90a12363 FigFileByteStreamWrite + 60
2   com.apple.CoreMedia             0x00007fff90a11265 CMByteStreamWriteBlockBuffer + 320
3   com.apple.MediaToolbox          0x00007fff8bbea72c 0x7fff8ba3f000 + 1750828
4   com.apple.MediaToolbox          0x00007fff8bbe5e6c 0x7fff8ba3f000 + 1732204
5   com.apple.MediaToolbox          0x00007fff8bbe3726 0x7fff8ba3f000 + 1722150
6   com.apple.CoreMedia             0x00007fff90a217b5 figThreadMain + 417
7   libsystem_pthread.dylib         0x00007fff8cbcc2fc _pthread_body + 131
8   libsystem_pthread.dylib         0x00007fff8cbcc279 _pthread_start + 176
9   libsystem_pthread.dylib         0x00007fff8cbca4b1 thread_start + 13

Thread 21:
0   libsystem_kernel.dylib          0x00007fff87e66946 __workq_kernreturn + 10
1   libsystem_pthread.dylib         0x00007fff8cbca4a1 start_wqthread + 13

Thread 22:
0   libsystem_kernel.dylib          0x00007fff87e66946 __workq_kernreturn + 10
1   libsystem_pthread.dylib         0x00007fff8cbca4a1 start_wqthread + 13

Thread 23:

Thread 3 crashed with X86 Thread State (64-bit):
  rax: 0x0000000000000010  rbx: 0x00000000000003c0  rcx: 0x000000011c6afa80  rdx: 0x000000011c99dc00
  rdi: 0x00000000000002c0  rsi: 0x000000000000007b  rbp: 0x00000001051f3a60  rsp: 0x00000001051f3940
   r8: 0x0000000000000438   r9: 0x000000011c88fc00  r10: 0x0000000000000f00  r11: 0x0000000000000780
  r12: 0x000000011c676000  r13: 0x000000011cccd500  r14: 0x000000011c871000  r15: 0x000000011c97f000
  rip: 0x00007fff92ee10e5  rfl: 0x0000000000010202  cr2: 0x000000011ccce000

Logical CPU:     0
Error Code:      0x00000004
Trap Number:     14


Binary Images:...    

我注意到异常代码中的地址等于cr2寄存器中的地址,但与技术说明中所写的rip中的地址不同。

最佳答案

您可以使用 lldbgdbXcode 的 调试控制台调试代码。在崩溃时,这些命令可能有助于在运行时获取有关对象状态的信息,以继续解决问题的根本原因。有关您可以使用的命令列表,请参阅 http://lldb.llvm.org/lldb-gdb.html

http://www.informit.com/articles/article.aspx?p=1829415&seqNum=6

您还可以启用Zombie 以获取与崩溃相关的更多信息

NSZombie 是一个 Cocoa 技巧,可以将任何要被释放 的对象变成一个 NSZombie 实例。无论如何你都会崩溃,但是不是 Xcode 只是提示你试图访问错误的内存地址,你会得到一些更好的东西,像这样:

2011-02-25 01:27:57.063 WordPress[10496:207] *** -[CFString isEqualToString:]: message sent to deallocated instance 0xcf1b0c0

不多,但至少你知道有罪的对象是一个字符串。

有关Zombie 的更多信息,请参阅 https://cocoaforbreakfast.wordpress.com/2011/02/25/exc_bad_access-a-zombie-nightmare/

关于ios - Objective C,在堆栈跟踪中不涉及我的应用程序时处理崩溃报告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30593927/

相关文章:

ios - 有序的核心数据关系 - 它是如何管理的或默认的顺序是什么?

ios - 二元运算符 ..< 不能应用于操作数 'Int' 和 'Int?'

ios - 如何使用 iTunes 文件共享以编程方式将文件传输到 iOS 设备?

objective-c - Swift (DBCamera) 无法识别 Obj C Init

c++ - GMP、MPC、MPFR的库文件和头文件是分开的,如何安装GCC?

ios - iOS 6导航栏标题默认阴影效果去除方法

ios - UIScrollView scrollViewShouldScrollToTop : alternative available when already at the top?

ios - 针对 ios6.1 编译的 Xcode 5 不保留布局

macos - 哪个是Mac上最好的免费代码编辑器?

macos - 带有标识符的 NSTableView 单元格始终给出 nil