Я отлаживаю плагин, используя XCode 4.5, используя Info> Launch> Wait for ??? чтобы запустить и отладить работу отлично.
Однако каждый раз, когда я нажимаю кнопку «Стоп» или нажимаю кнопку воспроизведения, приложение, к которому я прикрепляю свой плагин, будет убито (Killed: 9). Если я присоединяюсь к процессу, разве не логично, что кнопка воспроизведения или остановки отсоединит меня от этого процесса?
Есть ли способ, которым я могу изменить это поведение в XCode вместо того, чтобы вводить каждый раз на консоли lldb >> процесс detach для его продолжения?
Что я думаю, чтобы добавить некоторый код в мое основное приложение (то, к которому я присоединяю XCode), чтобы добавить кусок кода для отключения отладчика, это возможно?
[ РЕДАКТИРОВАТЬ ]Нашел этот код, который определяет, подключен ли отладчик:
bool debugger_attached( void )
{
int mib[ 4 ];
struct kinfo_proc info;
size_t size;
info.kp_proc.p_flag = 0;
mib[0] = CTL_KERN;
mib[1] = KERN_PROC;
mib[2] = KERN_PROC_PID;
mib[3] = getpid();
size = sizeof( info );
sysctl( mib, sizeof( mib ) / sizeof( *mib ), &info, &size, NULL, 0 );
return ( ( info.kp_proc.p_flag & P_TRACED ) != 0 );
}
Теперь, как отсоединить отладчик от текущего процесса?
Я думаю, что из последующих комментариев уже ясно, что это поведение — у XCode нет простого жеста графического интерфейса для отсоединения от процесса — именно так все и происходит сегодня. Есть по крайней мере один случай использования, где это правильное поведение — при отладке процесса iOS Simulator на вашем Mac приложение Simulator не запускается непосредственно Xcode / lldb — оно подключается к уже запущенному процессу. В этом случае, когда вы нажимаете кнопку «Стоп» в XCode, вы ожидаете, что смоделированное приложение прекратит работу. Это деталь реализации, о которой пользователи не знают / не должны знать, но есть некоторая логика в поведении.
Для чего это стоит, вы можете сделать псевдоним в вашем ~/.lldbinit
файл как
command alias det process detach
и теперь в консоли отладчика вы можете просто набрать det
отделить. (или любой другой псевдоним, который вы хотите настроить). Это не так просто, как нажать кнопку в графическом интерфейсе, но это лучше, чем process detach
,
Других решений пока нет …