2016-06-09 98 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