Objective c OSX High Sierra上的NSTask因EXC_软件异常而崩溃

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"); 或 然后在这两种情况下我都会崩溃。在这两种情况下,我都可以在崩溃发生之前在日志中看到一些目录列表输出 当不

我有一个mac OSX应用程序,它曾经使用system()来运行一些ImageMagick命令,但突然之间,这些调用开始因错误而崩溃

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)