libcef調試render進程

這篇文章的前提你的libcef能夠正常啓動,能打開一個基本的網頁,但是不清楚一些接口怎樣在render進程調用和調試的人來說的。
第一步,實現“CefRenderProcessHandler”接口,關鍵代碼:

class ClientApp : public CefApp,
	public CefRenderProcessHandler{
public:
	ClientApp();

	// CefApp methods:
	virtual CefRefPtr<CefRenderProcessHandler> GetRenderProcessHandler()
		OVERRIDE { return this; }

	virtual void OnWebKitInitialized()OVERRIDE;
	
}

第二步,初始化libcef的時候創建render進程:

	CefMainArgs mainArgs;
	CefSettings settings;
    CefRefPtr<CefApp> app;
    settings.multi_threaded_message_loop = true;
	settings.log_severity = LOGSEVERITY_DISABLE;
	CefString(&settings.locale).FromWString(L"zh-CN");

	void* sandbox_info = NULL;
	CefRefPtr<ClientApp> CefApp(new ClientApp);
	int exit_code = CefExecuteProcess(mainArgs, CefApp, sandbox_info);

	bool lbRet = CefInitialize(mainArgs, settings, app, NULL);

第三步,給工程項目添加啓動的命令參數“--renderer-startup-dialog”:


第四步,在“ClientApp::OnWebKitInitialized”實現的接口中下斷點,啓動的調試,程序運行後會彈出對話框,然後根據對話框提示找到進出id,然後附加調試:




到了這裏ClientApp實現的CefRenderProcessHandler接口就可以進行斷點調試了。另外,如果你需要Browser進程和render進程進行通信,則可以通過發送消息的方式,以下是Browser進程發送消息到render進程:

		CefRefPtr<CefProcessMessage> msg= CefProcessMessage::Create("my_message");
		CefRefPtr<CefListValue> args = msg->GetArgumentList();
		args->SetString(0, "my string");
		args->SetInt(0, 10);
		(CefRefPtr<CefBrowser>)browser_->SendProcessMessage(PID_RENDERER, msg);

然後在render進程就要實現“OnProcessMessageReceived”接口了:

bool ClientApp::OnProcessMessageReceived(CefRefPtr<CefBrowser> browser,
										 CefProcessId source_process,
										 CefRefPtr<CefProcessMessage> message) 
{
	CEF_REQUIRE_RENDERER_THREAD()
	const std::string& message_name = message->GetName();
	if (message_name == "my_message") {
		// Handle the message here...
		return true;
	}
	return false;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章