首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >NSTask与EXC_SOFTWARE异常在OSX高塞拉利昂上的崩溃

NSTask与EXC_SOFTWARE异常在OSX高塞拉利昂上的崩溃
EN

Stack Overflow用户
提问于 2018-09-28 09:22:35
回答 1查看 299关注 0票数 2

我有一个mac应用程序,用于使用system()运行一些ImageMagick命令--但是突然之间,这些调用开始崩溃。

代码语言:javascript
运行
复制
EXC_SOFTWARE (code=131072,subcode 0x0)

最近,我唯一能想到的改变就是升级到High,然后Xcode自己升级到10.0 --所以其中一个可能与它有关。

因此,例如,如果我尝试:

代码语言:javascript
运行
复制
system("ls -l");

代码语言:javascript
运行
复制
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队列上运行--但我也在主队列上尝试过它们,但它们仍然崩溃。

当我使用ImageMagick运行我的NSTask代码时,命令完成并输出它应该使用的映像,但随后我得到了相同的崩溃(BTW,这就是为什么我通过bash运行命令的原因,因为IM启动了鬼怪脚本,需要设置路径才能正常工作)。

因此,看起来这些命令正在完成,而一旦命令完成,其他的事情就会导致崩溃。

下面是控制台回溯跟踪(包括ls -l命令的部分输出),它在运行NSTask版本的ls -l时崩溃,上面显示在主ViewController的loadView中:

代码语言:javascript
运行
复制
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) 

根据请求,我尝试创建一个简单的命令行应用程序:

代码语言:javascript
运行
复制
int main(int argc, const char * argv[]) {
    printf("Hello, World!\n");
    system("ls -l");
    return 0;
}

除了同样的例外,它也坠毁了:

代码语言:javascript
运行
复制
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 )推出的,才导致了这个问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-08 15:23:03

在我看来,这是一个xCode 10错误。向苹果公司报告这是他们的回应:

我们不熟悉EXC_SOFTWARE信号,但在线搜索似乎涉及到一些反病毒软件。你的Mac上有安装吗?您可能需要询问该软件的制造商,如果这是预期的,如果有任何解决办法。如果可以尝试禁用它来查看它是否能复制,这可能是有指导意义的。

我确实让BitDefender运行在我的mac上-移除它,嘿,这个bug消失了。因此,这是一个BitDefender错误。会向他们报告的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52552187

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档