debug chromium project - create sub proces
前言
chromium主程序运行时,是靠子进程来干活的,带不同参数干不同活.
子进程有工具类的(crash process), 有页面渲染的。还没有具体去跟,只有跟着不同参数的子进程再跑,才能知道具体干了啥,是怎么干的。
这个试验,先确定chromium主进程,创建子进程的点,启动的子进程数量,启动子进程的时机,猜子进程的功能(按照子进程参数猜).
试验
chromium进程创建点
chromium启动后,在主UI出来之前,就会建立4个chrome, 不包括启动后,又结束的chrome工具子进程
主进程创建子进程的点共有3个:
A : D:\chrominum\src\third_party\crashpad\crashpad\client\crashpad_client_win.cc:480
B : D:\chrominum\src\base\process\launch_win.cc:299
C : D:\chrominum\src\sandbox\win\src\target_process.cc:165
A, B点是chromium初始化时建立的子进程,每个点只新建一个子进程
C点是新建内嵌页面 或 (输入url时 + 回车) 新建的子进程,如果输入的url是无效的,任务循环会因为重新刷页面,再新建渲染子进程(根据参数猜的).
C点所在的任务循环层次关系
void SchedulerWorker::RunWorker() => while (!ShouldExit()) // 这是一个任务循环, 如果有任务就启动,否则就等结束标记
TaskTracker::RunAndPopNextTask()
TaskTracker::RunOrSkipTask()
TaskAnnotator::RunTask()
ChildProcessLauncherHelper::LaunchOnLauncherThread()
ChildProcessLauncherHelper::LaunchProcessOnLauncherThread()
sandbox::ResultCode StartSandboxedProcess()
sandbox::ResultCode SandboxWin::StartSandboxedProcess()
下一步的试验设想
chromium是用子进程来干活的,不同参数干不同事情.
工程太大了,准备修改程序入口点,将参数, PID,PPID打印出来,弹框。
将主程序(首个chrome.exe)非调试状态跑起来,遇到感兴趣的带参数子进程,就附加进去单步走流程,这样就能知道输入url后,启动的子进程具体作用是什么,如何去拿url远端数据。
试验数据
工程中用到的进程相关的函数CreateProcess
CreateProcessA
CreateProcessWCreateProcessAsUser
CreateProcessAsUserW// 启动的进程和位置
主程序启动
到这里, 任务管理器里面有1个chrome.exeD:\chrominum\src\third_party\crashpad\crashpad\client\crashpad_client_win.cc:480
D:\chrominum\src\out\Default\chrome.exe --type=crashpad-handler "--user-data-dir=C:\Users\LostSpeed\AppData\Local\Chromium\User Data" /prefetch:7 --monitor-self-annotation=ptype=crashpad-handler "--database=C:\Users\LostSpeed\AppData\Local\Chromium\User Data\Crashpad" "--metrics-dir=C:\Users\LostSpeed\AppData\Local\Chromium\User Data" --annotation=plat=Win64 --annotation=prod=Chromium --annotation=ver=68.0.3424.0-devel --initial-client-data=0x23c,0x240,0x244,0x238,0x248,0x7fffe3f70078,0x7fffe3f70084,0x7fffe3f70048
到这里, 任务管理器里面有2个chrome.exe沙箱进程
D:\chrominum\src\sandbox\win\src\target_process.cc:165
"D:\chrominum\src\out\Default\chrome.exe" --type=gpu-process --field-trial-handle=1660,13290008870057280231,2031410662699215295,131072 --start-stack-profiler --gpu-preferences=KAAAAAAAAACAAwBgAQAAAAAAAAAAAGAAEAAAAAAAAAAAAAAAAAAAACgAAAAEAAAAIAAAAAAAAAAoAAAAAAAAADAAAAAAAAAAOAAAAAAAAAAQAAAAAAAAAAAAAAAKAAAAEAAAAAAAAAAAAAAACwAAABAAAAAAAAAAAQAAAAoAAAAQAAAAAAAAAAEAAAALAAAA --start-stack-profiler --service-request-channel-token=C9BDADA8A3E7CA86FB42625A3C3828F6 --mojo-platform-channel-handle=1672 --ignored=" --type=renderer " /prefetch:2
到这里, 任务管理器里面有3个chrome.exe沙箱进程
D:\chrominum\src\base\process\launch_win.cc:299
"D:\chrominum\src\out\Default\chrome.exe" --type=gpu-process --field-trial-handle=1660,13290008870057280231,2031410662699215295,131072 --disable-gpu-sandbox --start-stack-profiler --gpu-preferences=KAAAAAAAAACAAwBgAQAAAAAAAAAAAGAAEAAAAAAAAAAAAAAAAAAAACgAAAAEAAAAIAAAAAAAAAAoAAAAAAAAADAAAAAAAAAAOAAAAAAAAAAQAAAAAAAAAAAAAAAKAAAAEAAAAAAAAAAAAAAACwAAABAAAAAAAAAAAQAAAAoAAAAQAAAAAAAAAAEAAAALAAAA --start-stack-profiler --service-request-channel-token=23EC725222AE3A68FCA02BBE024ED9EB --mojo-platform-channel-handle=1940 /prefetch:2
到这里, 任务管理器里面有4个chrome.exe沙箱进程
到这里, 任务管理器里面有3个chrome.exe
D:\chrominum\src\sandbox\win\src\target_process.cc:165
"D:\chrominum\src\out\Default\chrome.exe" --type=renderer --field-trial-handle=1660,13290008870057280231,2031410662699215295,131072 --service-pipe-token=3F9A9A5790BBF278B79E8A731B47A9A6 --lang=zh-CN --instant-process --enable-offline-auto-reload --enable-offline-auto-reload-visible-only --blink-settings=cssExternalScannerNoPreload=false,cssExternalScannerPreload=true --start-stack-profiler --device-scale-factor=1 --num-raster-threads=4 --enable-main-frame-before-activation --service-request-channel-token=3F9A9A5790BBF278B79E8A731B47A9A6 --renderer-client-id=5 --mojo-platform-channel-handle=2504 /prefetch:1
到这里, 任务管理器里面有4个chrome.exe, chrome界面出来了沙箱进程
到这里, 任务管理器里面有4个chrome.exe, chrome界面出来了
"D:\chrominum\src\out\Default\chrome.exe" --type=renderer --field-trial-handle=1660,13290008870057280231,2031410662699215295,131072 --service-pipe-token=FB689E378C80F09AA4884573DE3265C9 --lang=zh-CN --enable-offline-auto-reload --enable-offline-auto-reload-visible-only --blink-settings=cssExternalScannerNoPreload=false,cssExternalScannerPreload=true --device-scale-factor=1 --num-raster-threads=4 --enable-main-frame-before-activation --service-request-channel-token=FB689E378C80F09AA4884573DE3265C9 --renderer-client-id=6 --mojo-platform-channel-handle=4200 /prefetch:1
到这里, 任务管理器里面有5个chrome.exe, chrome界面出来了沙箱进程, 这是一个提示框,说要不要恢复页面。
到这里, 任务管理器里面有5个chrome.exe, chrome界面出来了
D:\chrominum\src\base\process\launch_win.cc:299
"D:\chrominum\src\out\Default\chrome.exe" --type=utility --field-trial-handle=1660,13290008870057280231,2031410662699215295,131072 --lang=zh-CN --no-sandbox --service-request-channel-token=6FA04EB52F296198552636EB3F9EC406 --mojo-platform-channel-handle=4380 /prefetch:8
到这里, 任务管理器里面有5个chrome.exe, chrome界面出来了到这里, 任务管理器里面有4个chrome.exe, chrome界面出来了
D:\chrominum\src\sandbox\win\src\target_process.cc:165
"D:\chrominum\src\out\Default\chrome.exe" --type=utility --field-trial-handle=1660,13290008870057280231,2031410662699215295,131072 --lang=zh-CN --service-sandbox-type=utility --service-request-channel-token=EBCBF92786F883AEB2260656DD3F7FAD --mojo-platform-channel-handle=1420 --ignored=" --type=renderer " /prefetch:8
到这里, 任务管理器里面有5个chrome.exe, chrome界面出来了到这里, 任务管理器里面有4个chrome.exe, chrome界面出来了
D:\chrominum\src\sandbox\win\src\target_process.cc:165
"D:\chrominum\src\out\Default\chrome.exe" --type=renderer --field-trial-handle=1660,13290008870057280231,2031410662699215295,131072 --service-pipe-token=B4FDCA8813E614ED49C32FF7D6DB5F3E --lang=zh-CN --enable-offline-auto-reload --enable-offline-auto-reload-visible-only --blink-settings=cssExternalScannerNoPreload=false,cssExternalScannerPreload=true --start-stack-profiler --device-scale-factor=1 --num-raster-threads=4 --enable-main-frame-before-activation --service-request-channel-token=B4FDCA8813E614ED49C32FF7D6DB5F3E --renderer-client-id=9 --mojo-platform-channel-handle=3088 /prefetch:1到这里, 任务管理器里面有5个chrome.exe, chrome界面出来了
"D:\chrominum\src\out\Default\chrome.exe" --type=utility --field-trial-handle=1660,13290008870057280231,2031410662699215295,131072 --lang=zh-CN --service-sandbox-type=utility --service-request-channel-token=D03B73C77950929F1681E0998FBEE3A3 --mojo-platform-channel-handle=4124 --ignored=" --type=renderer " /prefetch:8
这个进程是提示页面,说“未正常关闭,要恢复页面么?”。可能是调试的缘故。// 这是有任务循环工作者启动的主UI
D:\chrominum\src\sandbox\win\src\target_process.cc:165
"D:\chrominum\src\out\Default\chrome.exe" --type=renderer --field-trial-handle=1660,13290008870057280231,2031410662699215295,131072 --service-pipe-token=5BA90E8A8815E761C735DA23570FCE9A --lang=zh-CN --enable-offline-auto-reload --enable-offline-auto-reload-visible-only --blink-settings=cssExternalScannerNoPreload=false,cssExternalScannerPreload=true --device-scale-factor=1 --num-raster-threads=4 --enable-main-frame-before-activation --service-request-channel-token=5BA90E8A8815E761C735DA23570FCE9A --renderer-client-id=11 --mojo-platform-channel-handle=5384 /prefetch:1
到这里, 任务管理器里面有6个chrome.exe, chrome界面出来了
调用点:
sandbox::ResultCode SandboxWin::StartSandboxedProcess()
sandbox::ResultCode StartSandboxedProcess()
ChildProcessLauncherHelper::LaunchProcessOnLauncherThread()
ChildProcessLauncherHelper::LaunchOnLauncherThread()
TaskAnnotator::RunTask()
TaskTracker::RunOrSkipTask()
TaskTracker::RunAndPopNextTask()
void SchedulerWorker::RunWorker() => while (!ShouldExit()) // 这是一个任务循环, 如果有任务就启动,否则就等结束标记在主UI输入url回车后,启动了线程 ThreadFunc_rc_dword(), 由线程自动子进程(先后启动了2个子进程)
D:\chrominum\src\sandbox\win\src\target_process.cc:165
"D:\chrominum\src\out\Default\chrome.exe" --type=renderer --field-trial-handle=1660,13290008870057280231,2031410662699215295,131072 --service-pipe-token=0C8674CD51388AC22F2FE11A8CC66566 --lang=zh-CN --enable-offline-auto-reload --enable-offline-auto-reload-visible-only --blink-settings=cssExternalScannerNoPreload=false,cssExternalScannerPreload=true --device-scale-factor=1 --num-raster-threads=4 --enable-main-frame-before-activation --service-request-channel-token=0C8674CD51388AC22F2FE11A8CC66566 --renderer-client-id=12 --mojo-platform-channel-handle=6552 /prefetch:1
"D:\chrominum\src\out\Default\chrome.exe" --type=renderer --field-trial-handle=1660,13290008870057280231,2031410662699215295,131072 --service-pipe-token=D73821D9B612ED80D75787EA7D95C1F9 --lang=zh-CN --enable-offline-auto-reload --enable-offline-auto-reload-visible-only --blink-settings=cssExternalScannerNoPreload=false,cssExternalScannerPreload=true --device-scale-factor=1 --num-raster-threads=4 --enable-main-frame-before-activation --service-request-channel-token=D73821D9B612ED80D75787EA7D95C1F9 --renderer-client-id=13 --mojo-platform-channel-handle=4056 /prefetch:1CTRL + N 新建tab页时,也启动了2个子进程
D:\chrominum\src\sandbox\win\src\target_process.cc:165
"D:\chrominum\src\out\Default\chrome.exe" --type=renderer --field-trial-handle=1660,13290008870057280231,2031410662699215295,131072 --service-pipe-token=2C5B91947805325C2D071BD11CFF73AB --lang=zh-CN --enable-offline-auto-reload --enable-offline-auto-reload-visible-only --blink-settings=cssExternalScannerNoPreload=false,cssExternalScannerPreload=true --start-stack-profiler --device-scale-factor=1 --num-raster-threads=4 --enable-main-frame-before-activation --service-request-channel-token=2C5B91947805325C2D071BD11CFF73AB --renderer-client-id=14 --mojo-platform-channel-handle=7356 /prefetch:1
"D:\chrominum\src\out\Default\chrome.exe" --type=renderer --field-trial-handle=1660,13290008870057280231,2031410662699215295,131072 --service-pipe-token=14B2EA2FD069F7FC520684E218DCD552 --lang=zh-CN --instant-process --enable-offline-auto-reload --enable-offline-auto-reload-visible-only --blink-settings=cssExternalScannerNoPreload=false,cssExternalScannerPreload=true --device-scale-factor=1 --num-raster-threads=4 --enable-main-frame-before-activation --service-request-channel-token=14B2EA2FD069F7FC520684E218DCD552 --renderer-client-id=15 --mojo-platform-channel-handle=4804 /prefetch:1在新建tab页输入url回车时,启动了2进程,应该是是去拿远端url数据的
第一个进程命令行忘记记录了
"D:\chrominum\src\out\Default\chrome.exe" --type=renderer --field-trial-handle=1660,13290008870057280231,2031410662699215295,131072 --service-pipe-token=38D9EE83E7689D3271A7C0252BC21AC5 --lang=zh-CN --enable-offline-auto-reload --enable-offline-auto-reload-visible-only --blink-settings=cssExternalScannerNoPreload=false,cssExternalScannerPreload=true --device-scale-factor=1 --num-raster-threads=4 --enable-main-frame-before-activation --service-request-channel-token=38D9EE83E7689D3271A7C0252BC21AC5 --renderer-client-id=17 --mojo-platform-channel-handle=6764 /prefetch:1再重复一次新建TAB页, 新建2个子进程
"D:\chrominum\src\out\Default\chrome.exe" --type=renderer --field-trial-handle=1660,13290008870057280231,2031410662699215295,131072 --service-pipe-token=D61371FCD217C944AD45981186E12F23 --lang=zh-CN --enable-offline-auto-reload --enable-offline-auto-reload-visible-only --blink-settings=cssExternalScannerNoPreload=false,cssExternalScannerPreload=true --start-stack-profiler --device-scale-factor=1 --num-raster-threads=4 --enable-main-frame-before-activation --service-request-channel-token=D61371FCD217C944AD45981186E12F23 --renderer-client-id=18 --mojo-platform-channel-handle=8472 /prefetch:1
"D:\chrominum\src\out\Default\chrome.exe" --type=renderer --field-trial-handle=1660,13290008870057280231,2031410662699215295,131072 --service-pipe-token=84ACAEED8A6ED32E6C7A5734BB20E503 --lang=zh-CN --instant-process --enable-offline-auto-reload --enable-offline-auto-reload-visible-only --blink-settings=cssExternalScannerNoPreload=false,cssExternalScannerPreload=true --device-scale-factor=1 --num-raster-threads=4 --enable-main-frame-before-activation --service-request-channel-token=84ACAEED8A6ED32E6C7A5734BB20E503 --renderer-client-id=19 --mojo-platform-channel-handle=5540 /prefetch:1重复 : 在新建tab页输入url回车时,启动了2进程,应该是是去拿远端url数据的
如果输入的是错误url
"D:\chrominum\src\out\Default\chrome.exe" --type=renderer --field-trial-handle=1660,13290008870057280231,2031410662699215295,131072 --service-pipe-token=C59DBD0A765B23D2DA7512B71C77FF0D --lang=zh-CN --enable-offline-auto-reload --enable-offline-auto-reload-visible-only --blink-settings=cssExternalScannerNoPreload=false,cssExternalScannerPreload=true --device-scale-factor=1 --num-raster-threads=4 --enable-main-frame-before-activation --service-request-channel-token=C59DBD0A765B23D2DA7512B71C77FF0D --renderer-client-id=23 --mojo-platform-channel-handle=9956 /prefetch:1
"D:\chrominum\src\out\Default\chrome.exe" --type=renderer --field-trial-handle=1660,13290008870057280231,2031410662699215295,131072 --service-pipe-token=96E10BB0B8F734153D0E4F74A6E2FF7D --lang=zh-CN --enable-offline-auto-reload --enable-offline-auto-reload-visible-only --blink-settings=cssExternalScannerNoPreload=false,cssExternalScannerPreload=true --device-scale-factor=1 --num-raster-threads=4 --enable-main-frame-before-activation --service-request-channel-token=96E10BB0B8F734153D0E4F74A6E2FF7D --renderer-client-id=24 --mojo-platform-channel-handle=10648 /prefetch:1
"D:\chrominum\src\out\Default\chrome.exe" --type=renderer --field-trial-handle=1660,13290008870057280231,2031410662699215295,131072 --service-pipe-token=6896311F0CFA122D45B674532F890442 --lang=zh-CN --enable-offline-auto-reload --enable-offline-auto-reload-visible-only --blink-settings=cssExternalScannerNoPreload=false,cssExternalScannerPreload=true --device-scale-factor=1 --num-raster-threads=4 --enable-main-frame-before-activation --service-request-channel-token=6896311F0CFA122D45B674532F890442 --renderer-client-id=25 --mojo-platform-channel-handle=10092 /prefetch:1
"D:\chrominum\src\out\Default\chrome.exe" --type=renderer --field-trial-handle=1660,13290008870057280231,2031410662699215295,131072 --service-pipe-token=2B195E6B1C572D103D36E58C05ABB603 --lang=zh-CN --enable-offline-auto-reload --enable-offline-auto-reload-visible-only --blink-settings=cssExternalScannerNoPreload=false,cssExternalScannerPreload=true --start-stack-profiler --device-scale-factor=1 --num-raster-threads=4 --enable-main-frame-before-activation --service-request-channel-token=2B195E6B1C572D103D36E58C05ABB603 --renderer-client-id=26 --mojo-platform-channel-handle=10016 /prefetch:1
"D:\chrominum\src\out\Default\chrome.exe" --type=renderer --field-trial-handle=1660,13290008870057280231,2031410662699215295,131072 --service-pipe-token=676C0183AE316CCBB0D42C36B554DC46 --lang=zh-CN --enable-offline-auto-reload --enable-offline-auto-reload-visible-only --blink-settings=cssExternalScannerNoPreload=false,cssExternalScannerPreload=true --start-stack-profiler --device-scale-factor=1 --num-raster-threads=4 --enable-main-frame-before-activation --service-request-channel-token=676C0183AE316CCBB0D42C36B554DC46 --renderer-client-id=27 --mojo-platform-channel-handle=7972 /prefetch:1
错误的url会不断去重试页面, 会不断地新建子进程
debug chromium project - create sub proces相关推荐
- Conditional project or library reference in Visual Studio
Conditional project or library reference in Visual Studio In case you were wondering why you haven't ...
- 微软宣布 Edge 浏览器将切换至 Chromium 内核
简述 据微软官方 blog的消息,windows 的默认浏览器 Edge将切换内核至 Chromium,并且微软将秉承开源精神,在未来更多的为 Chromium项目贡献代码. 微软具体说了什么? 原文 ...
- Activity生命周期方法的调用顺序project与測试日志
以下为測试activity的方法的运行顺序 project与測试资源地址 androidproject AndroidManifest.xml <? xml version="1. ...
- How to debug LLVM by VS2019 on Windows
How to debug LLVM by VS2019 on Windows 一.Enviroment 二.Git Clone Code 三.Build Project 四.Debug LLVM 1. ...
- 实现基于渠道和buildType(debug,release)的打包
2019独角兽企业重金招聘Python工程师标准>>> build增加结构体 configurations {//写博客productTedSDKCompileproductDevD ...
- How to DEBUG a trigger or procedure
DEBUGGING STORED PROCEDURES Over the past several weeks, we've been working on debugging a stored pr ...
- 导入工程时出现错误:Invalid project description
http://berdy.iteye.com/blog/1115279...
http://berdy.iteye.com/blog/1115279 new -> android project -> create project from exist source ...
- 解决eclipse中overlaps the location of another project: 'xxxx'
找遍网络发现各种解释,最常见的一种是: new -> android project -> create project from exist source 出现如下错误信息: Inval ...
- DEBUG:error
"QtCTP.exe"(Win32): 已加载"D:\SCTD2019\SRC\qtctp-master\qtctp-master\debug\QtCTP.exe&quo ...
最新文章
- Python matplotlib可视化:自定义轴标签格式化函数(在轴刻度上添加自定义的数值以及符号形式)、使用自定义函数在Matplotlib中为坐标轴刻度添加自定义符号(例如,货币符号¥$等)
- 关于深度学习推荐系统领域的15个问题
- 1.记住密码 提示框
- springBoot 项目 jar/war打包 并运行
- Android 跳转网页链接
- yiilite.php,缓存 - yii在哪些情况下可以加载yiilite.php?
- python接收易语言dll消息_易语言[项目开发]-插件信息提取程序源码,易语言获取DLL文件信息...
- 2019/3/27写给自己
- Asp.net mvc中Controller的返回值
- 关于Unity中的transform组件(二)
- c语言编译程序的软件下载,c语言编译器(wintc)
- 【物理应用】基于matlab双目视觉三维重建【含Matlab源码 1781期】
- ipython 安装
- php selectradio和checkbox默认选择的实现方法
- 【EGE】五子棋小游戏 (鼠标控制)
- cosx等价无穷小_第一章 函数与极限 第七节 无穷小的比较
- MySQL数据库下载与安装详细教程
- html不兼容的原因,浏览器不兼容的原因和解决方法
- DataCastle微额借款用户人品预测大赛冠军思路
- 线性回归模型评估:R-square(确定系数)、均方根、均方差
热门文章
- 计算机语言学 博士,香港理工大学急招语言学博士!项目已拿到funding!
- 误分区的删除之DBR的修复
- IDEA编译处理报错:You aren’t using a compiler supported by lombok, so lombok will not work and has been dis
- 全球5m12.5m30m90m精度 DEM下载使用详解教程,1分钟学会~
- android 正则 ip,判断URL和IP的正则表达式
- tp5.1 配置虚拟域名
- 佳信客服接口文档 REST API(第二部分)包含用户、聊天室、群聊、消息管理,通用接口数据结构、通用接口返回码
- telegram账号被盗了,无法登录。
- 判断文件编码格式是否是UTF-8还是GBK格式
- c语言base6r,[网络天地]请问怎样解base64码的email? 非常感谢!