2016-06-09 200 views
3

试图通过附加到插件进程来调试NPAPI插件在10.11中似乎不起作用。如何在OSX 10.11中调试Safari NPAPI插件?

与LLDB附加透露:

sudo lldb -p 39337 
(lldb) process attach --pid 39337 
error: attach failed: unable to attach 

这似乎影响到用于嵌入式的Webkit(名为WebKitPluginHost插件主机)和“现代”的webkit在Safari中使用这两种“传统”的WebKit(与名为com.apple.WebKit.Plugin.64插件主机)

我已经在恢复模式下使用csrutil禁用了“调试限制”,但在这种情况下似乎没有帮助。

+0

我有同样的问题试图调试Perl扩展。即使在禁用调试限制之后,在lldb下运行系统'perl'也会返回错误:进程已退出,状态为-1(无法附加)。 – nwellnhof

+0

perl的解决方法是将perl二进制文件复制到/ usr/bin中使用该文件运行。许多应用程序可以以这种方式连接(不是我的,因为浏览器直接启动它)。 – harningt

回答

0

我没有特别10.11试过,但我觉得最简单的方法是添加一个阻挡部分等候在启动代码进行调试你的插件:

#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 

然后在启动代码地方:

#if WAIT_FOR_DEBUGGER 
    #warning "WILL BLOCK ON P_TRACED" 
    while (!beingDebugged()) 
     sleep(1); 
#endif 

如果无法找到正确的流程连接到你可以有,这也输出PID到文件,以便你可以阅读和查找。

+0

这是一个有用的项目,但系统中的调试保护可防止任何事件附加到确定的插件进程。 – harningt

+0

有趣;那必须是新的。我最近在Safari中没有尝试过,因为我的所有插件目前仍在正常工作=] – taxilian