Один метод, который я иногда использовал с FireBreath плагинами, таков:
#if WAIT_FOR_DEBUGGER
static bool beingDebugged() {
int mib[4] = {CTL_KERN, KERN_PROC, KERN_PROC_PID, getpid()}; size_t mib_size = 4;
struct kinfo_proc kp; size_t kp_size = sizeof(kp);
int result = sysctl(mib, mib_size, &kp, &kp_size, NULL, 0);
return (0 == result) ? (P_TRACED & kp.kp_proc.p_flag) : false;
}
#endif
Затем в одной из точек входа (например, NP_Initialize) вы делаете:
#if WAIT_FOR_DEBUGGER
#warning "WILL BLOCK ON P_TRACED"
while (!beingDebugged())
sleep(1);
#endif
Мой друг придумал это, и это, кажется, работает довольно хорошо.Однако вы должны знать, что в Safari 5.1 браузер уничтожит плагин (отправит SIG_KILL) через (довольно короткое) время, когда он не получит от него ответа.Из-за этого почти невозможно отладить Safari 5.1;Из-за этого я настоятельно рекомендую вам отладку в Firefox или Chrome.
Это заставит плагин ждать подключения вашего отладчика.Обратите внимание, что в Safari 5.1 изменилось имя процесса плагина;Я забыл, что это сейчас точно, но это определенно не работает, и это не Safari =]
На днях я найду время добавить это в FireBreath по умолчанию np_mainmain.cpp файл ....