Я работаю с кодом Objective-C ++, который запускает фоновый процесс из моего основного приложения. Фоновый процесс не имеет графического интерфейса, запускается только на мгновение и должен быть запущен из основного приложения, чтобы он был полезен. Это означает, что я не могу легко подключиться к фоновому процессу с помощью Xcode или запустить его автономно, поэтому мне нужно полагаться на вывод в stderr.
В этом случае, где я должен искать выход stderr?
Больше информации, если я задаю неправильный вопрос: я использую старую версию Xcode (3.2.6) по причинам, связанным с возрастом поддерживаемого мной проекта. Я работаю над кодом обработки исключений / создания отчетов, что затрудняет пошаговое выполнение кода, поскольку GDB любит перехватывать исключения, а не позволять моему коду делать это. Фоновый процесс запускается только тогда, когда в основном приложении возникает структурированное исключение.
Выдержка из результатов команды lsof в моем главном приложении, может быть уместна:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
<appname> 2788 <username> 0r CHR 3,2 0t0 311 /dev/null
<appname> 2788 <username> 1w CHR 3,2 0t473379 311 /dev/null
<appname> 2788 <username> 2w CHR 3,2 0x6d545f8 311 /dev/null
Вы можете использовать lsof
Команда, чтобы выяснить, куда был перенаправлен определенный дескриптор файла:
lsof -a -p <your pid> -d 0,1,2
Когда запускается фоновый процесс, обычно дочерний процесс присоединяется к тем же стандартным потокам, что и родительский процесс. Для обычных приложений Какао по умолчанию вы должны увидеть этот вывод в Console.app в разделе «все сообщения» или «сообщения консоли».
До Mountain Lion вы также могли просматривать вывод сервисов launchd там, но я считаю, что с тех пор launchd перенаправляет stdout и stderr в / dev / null.
Это означает, что я не могу легко подключиться к фоновому процессу с помощью XCode или запустить его автономно
Если вы можете запустить основное приложение из XCode, вы сможете настроить отладчик для подключения к дочерним процессам, которые он запускает.
Отладчику Xcode также может быть приказано дождаться запуска определенного процесса и подключиться к нему.
Других решений пока нет …