chronmium 默认是一个tab一个进程,主进程获得需要的URL,通过IPC消息传递给render进程。render进程进行网络请求,显示。
调试:
1.VS调试里面附加到进程,进行多进程调试。
2.如何知道我们要调试的进程的进程ID?在沙盒的代码
target_process.cc中的
if (!::CreateProcessAsUserW(lockdown_token_,
exe_path,
cmd_line.get(),
NULL, // No security attribute.
NULL, // No thread attribute.
inherit_handles,
flags,
NULL, // Use the environment of the caller.
NULL, // Use current directory of the caller.
startup_info.startup_info(),
process_info.Receive())) {
return ::GetLastError();
}
后面下断点 attention!!这个时候进程还没跑起来,不要去附加,容易直接结束掉这个新生成的进程。后面再去附加,比如在旧的render进程获得某个消息后再去附加。
ps:chronmium 对不同的网站的请求是生成一个新render进程,请求结束后替换原来的,所以一定要附加到这个新进程上面。
3.附加上这个新进程后,在render_view_impl.cc中的
void RenderViewImpl::OnNavigate(const ViewMsg_Navigate_Params& params) {这里下断点,这边就是网络请求的过程。至于这个IPC消息是如何得到的,是通过跟踪主 进程的请求URL的操作一步一步跟进去看到的。