Objective c OSX High Sierra上的NSTask因EXC_软件异常而崩溃
我有一个mac OSX应用程序,它曾经使用system()来运行一些ImageMagick命令,但突然之间,这些调用开始因错误而崩溃Objective c OSX High Sierra上的NSTask因EXC_软件异常而崩溃,objective-c,macos,macos-high-sierra,Objective C,Macos,Macos High Sierra,我有一个mac OSX应用程序,它曾经使用system()来运行一些ImageMagick命令,但突然之间,这些调用开始因错误而崩溃 EXC_SOFTWARE (code=131072,subcode 0x0) 最近我能想到的唯一改变是我升级到High Sierra,然后Xcode将自己更新到10.0——所以也许其中一个可能与它有关 例如,如果我尝试: system("ls -l"); 或 然后在这两种情况下我都会崩溃。在这两种情况下,我都可以在崩溃发生之前在日志中看到一些目录列表输出 当不
EXC_SOFTWARE (code=131072,subcode 0x0)
最近我能想到的唯一改变是我升级到High Sierra,然后Xcode将自己更新到10.0——所以也许其中一个可能与它有关
例如,如果我尝试:
system("ls -l");
或
然后在这两种情况下我都会崩溃。在这两种情况下,我都可以在崩溃发生之前在日志中看到一些目录列表输出
当不尝试运行bash时也会发生崩溃-如果我尝试直接从NSTask运行/bin/ls,则会发生相同的崩溃
这些命令通常在后台GCD队列上运行——但我也在主队列上尝试过它们,但它们仍然会崩溃
当我使用NSTask运行ImageMagick代码时,命令完成并输出它应该输出的图像,但随后我得到相同的崩溃(顺便说一句,这就是为什么我通过bash运行命令,因为IM启动ghostscript,并且需要将路径设置为正常工作)
因此,看起来这些命令正在完成,然后在命令完成后发生了其他事情导致崩溃
以下是在主ViewController的loadView中运行上述执行ls-l的NSTask版本时发生崩溃的控制台回溯(包括ls-l命令的部分输出):
total 8
drwxr-xr-x 3 simon staff 96 Sep 26 15:44 Database.app
-rw-r--r-- 1 simon staff 2219 Sep 27 13:23 00000001_01.png
(lldb) bt
* thread #1, queue = 'com.apple.main-thread', stop reason = EXC_SOFTWARE (code=131072, subcode=0x0)
* frame #0: 0x00007fff6598193e libsystem_kernel.dylib`__posix_spawn + 10
frame #1: 0x00007fff6597ae67 libsystem_kernel.dylib`posix_spawn + 483
frame #2: 0x00007fff3fc42230 Foundation`-[NSConcreteTask launchWithDictionary:error:] + 3510
frame #3: 0x000000010000f430 FanfugaDatabase`-[ViewController viewDidLoad](self=0x00006040000e2200, _cmd="viewDidLoad") at ViewController.m:45
frame #4: 0x00007fff3af1c20a AppKit`-[NSViewController _sendViewDidLoad] + 97
frame #5: 0x00007fff3b4c0afd AppKit`_noteLoadCompletionForObject + 641
frame #6: 0x00007fff3aea097d AppKit`-[NSIBObjectData nibInstantiateWithOwner:options:topLevelObjects:] + 2042
frame #7: 0x00007fff3af9bd1e AppKit`-[NSNib _instantiateNibWithExternalNameTable:options:] + 679
frame #8: 0x00007fff3af9b97a AppKit`-[NSNib _instantiateWithOwner:options:topLevelObjects:] + 136
frame #9: 0x00007fff3af9ac50 AppKit`-[NSViewController loadView] + 343
frame #10: 0x00007fff3af12a9e AppKit`-[NSViewController _loadViewIfRequired] + 75
frame #11: 0x00007fff3af12a09 AppKit`-[NSViewController view] + 30
frame #12: 0x00007fff3b091365 AppKit`-[NSWindow _contentViewControllerChanged] + 109
frame #13: 0x00007fff3fa7de8e Foundation`-[NSObject(NSKeyValueCoding) setValue:forKey:] + 331
frame #14: 0x00007fff3b0d40c5 AppKit`-[NSWindow setValue:forKey:] + 111
frame #15: 0x00007fff3b0d4029 AppKit`-[NSIBUserDefinedRuntimeAttributesConnector establishConnection] + 637
frame #16: 0x00007fff3aea0719 AppKit`-[NSIBObjectData nibInstantiateWithOwner:options:topLevelObjects:] + 1430
frame #17: 0x00007fff3af9bd1e AppKit`-[NSNib _instantiateNibWithExternalNameTable:options:] + 679
frame #18: 0x00007fff3af9b97a AppKit`-[NSNib _instantiateWithOwner:options:topLevelObjects:] + 136
frame #19: 0x00007fff3b6f246c AppKit`-[NSStoryboard instantiateControllerWithIdentifier:] + 236
frame #20: 0x00007fff3ae94a27 AppKit`NSApplicationMain + 729
frame #21: 0x0000000100012262 Database`main(argc=3, argv=0x00007ffeefbff4f8) at main.m:12
frame #22: 0x00007fff65831015 libdyld.dylib`start + 1
frame #23: 0x00007fff65831015 libdyld.dylib`start + 1
(lldb)
根据要求,我尝试创建一个普通命令行应用程序:
int main(int argc, const char * argv[]) {
printf("Hello, World!\n");
system("ls -l");
return 0;
}
这次崩溃的原因也是一样的:
Hello, World!
total 56
-rwxr-xr-x 1 simon staff 27680 Oct 1 21:34 test
(lldb) bt
* thread #1, queue = 'com.apple.main-thread', stop reason = EXC_SOFTWARE (code=131072, subcode=0x0)
* frame #0: 0x00007fff6598193e libsystem_kernel.dylib`__posix_spawn + 10
frame #1: 0x00007fff6597ae67 libsystem_kernel.dylib`posix_spawn + 483
frame #2: 0x00007fff658fc9b1 libsystem_c.dylib`system + 407
frame #3: 0x0000000100000f56 test`main(argc=1, argv=0x00007ffeefbff5e0) at main.c:14
frame #4: 0x00007fff65831015 libdyld.dylib`start + 1
(lldb)
更新
如果我直接从finder运行Cocoa应用程序或命令行测试可执行文件,它们都可以正常工作。因此,导致这个问题的原因与从xCode启动的应用程序(特别是xCode 10.0)有关。在我看来,这是一个xCode 10错误。向苹果公司报告,他们的反应如下: 我们不熟悉EXC_软件信号,但在线搜索 它似乎与一些反病毒软件有关。你有 你的Mac电脑上安装了什么?您可能需要询问制造商 该软件,如果这是预期的,如果有任何解决办法。如果 可以尝试禁用它以查看它是否可以复制,这可能会 要有教育意义
我确实让BitDefender在我的mac上运行-删除了它,嘿,presto,这个bug消失了。所以这是一个BitDefender bug。将向他们报告。有回溯吗?我添加了回溯-基本上,对system()或NSTask的任何调用似乎都会导致posix_spawn for meDoes
系统(“ls-l”)
在普通的C
控制台应用程序中崩溃?好问题-是的!将向原始帖子添加回溯。请原谅这些基本建议,但是:您是否尝试过重新启动?它是否发生在新用户帐户上?这会发生在其他Mac电脑上吗?
Hello, World!
total 56
-rwxr-xr-x 1 simon staff 27680 Oct 1 21:34 test
(lldb) bt
* thread #1, queue = 'com.apple.main-thread', stop reason = EXC_SOFTWARE (code=131072, subcode=0x0)
* frame #0: 0x00007fff6598193e libsystem_kernel.dylib`__posix_spawn + 10
frame #1: 0x00007fff6597ae67 libsystem_kernel.dylib`posix_spawn + 483
frame #2: 0x00007fff658fc9b1 libsystem_c.dylib`system + 407
frame #3: 0x0000000100000f56 test`main(argc=1, argv=0x00007ffeefbff5e0) at main.c:14
frame #4: 0x00007fff65831015 libdyld.dylib`start + 1
(lldb)