Сбой NSTask с исключением EXC_SOFTWARE в OSX High Sierra - PullRequest
0 голосов
/ 28 сентября 2018

У меня есть приложение 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 - если я пытаюсь запустить / bin / lsпрямо из NSTask я получаю такой же сбой.

Эти команды обычно выполняются в фоновой очереди GCD - но я пробовал их и в основной очереди, и они все еще вылетали.

Когда я запускаю свой код ImageMagick с помощью NSTask, команда завершается ивыводит изображение, которое должно быть, но затем я получаю тот же сбой (кстати, поэтому я запускаю команды через bash, потому что IM запускает ghostscript и требует правильной установки путей).

Такпохоже, что эти команды завершаются, а затем происходит что-то еще, что вызывает сбой после завершения команды.

Вот обратная трассировка консоли (включая частичный вывод команды ls -l) ее сбоя при запуске версии NSTask выполнения ls -l, показанного выше в loadView основного ViewController:

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) 

UPDATE

Если я запускаю приложение Какао или тестовый файл командной строки непосредственно из поиска, они работают нормально.Так что это связано с тем, что приложение, запускаемое из xCode (в частности, xCode 10.0), является причиной этой проблемы.

1 Ответ

0 голосов
/ 08 октября 2018

Это выглядело так, как будто это ошибка xCode 10 для меня.Об этом сообщили в Apple, и это был их ответ:

Мы не знакомы с сигналом EXC_SOFTWARE, но при поиске в Интернете он, похоже, связан с некоторым антивирусным программным обеспечением.У вас есть какой-либо установлен на вашем Mac?Вам, вероятно, придется спросить производителей этого программного обеспечения, ожидается ли это и есть ли обходные пути.Если есть возможность попробовать отключить его, чтобы посмотреть, воспроизводится ли он, это может быть поучительно.

У меня действительно работает BitDefender на моем Mac - удалил его, и эй до того, как эта ошибка исчезла.Так что это ошибка BitDefender.Сообщит об этом им.

...