我有一个Mac OSX应用程序,该应用程序过去曾使用system()运行一些ImageMagick命令-但突然之间,这些调用开始崩溃,
EXC_SOFTWARE (code=131072,subcode 0x0)
我唯一能想到的改变是最近我升级到High Sierra,然后Xcode自身更新到了10.0-所以也许其中之一可能与它有关。
例如,如果我尝试:
system("ls -l");
或
NSTask *task = [[NSTask alloc] init];
task.executableURL = [NSURL fileURLWithPath:@"/bin/bash"];
[task setArguments:@[ @"-c", @"ls -l"]];
NSError *error=nil;
[task launchAndReturnError:&error];
[task waitUntilExit];
然后在两种情况下都会发生此崩溃。在这两种情况下,我都可以看到崩溃发生之前日志中出现了一些目录列表输出。
当不尝试运行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)启动的应用程序有关。
答案 0 :(得分:0)
对我来说,这似乎是xCode 10的一个错误。向苹果公司举报,这是他们的回应:
我们对EXC_SOFTWARE信号不熟悉,但可以在线搜索 它似乎与某些防病毒软件有关。你有 Mac上安装了任何软件吗?您可能需要询问制造商 该软件,如果可以预期,并且有任何解决方法。如果 可以尝试禁用它以查看它是否再现,这可能 有启发性。
我确实在Mac上运行了BitDefender-删除了它,嘿,此错误消失了。因此,这是一个BitDefender错误。会向他们报告。