01 减少all.sln工程数量可以降低调试崩溃率
chromium vs2017的工程数量庞大。71.0.3578.xx版本默认在windows下大约又2718个工程。使用vs2017调试时,很容易发生崩溃。
实际上我们真正修改的内容和很少的。比如大部分第三方库的工程,基础库等都可以移除掉。
02 手动移除方法较快的方法
A: 备份多份 all.sln
all01.sln
all02.sln
…
B: 批量修改all01.sln
使用文本编辑器打开 all01.sln,批量删除里面不想要的工程内容。如所有包含:third_party 内容的工程。搜索到后依次删除即可。
从Project 到 EndProject
代表一个工程。
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "(third_party)", "../../base/third_party", "{192300BB-7354-DA18-DE16-A286CDAE94AB}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "(dynamic_annotations)", "../../base/third_party/dynamic_annotations", "{07DE5C0B-8D79-B3CA-BFA3-761FD8703E9B}"
EndProject
...
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "(zlib)", "../../third_party/zlib", "{9008985C-25B5-272C-CA58-373EB2F2332B}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "(google)", "../../third_party/zlib/google", "{B07AB1AB-4090-6A1C-FDB8-7EBA92A1D1B8}"
EndProject
C:个别卸载项目
删除完之后,使用vs2017打开这个all01.sln。
在手动删除个别不需要的工程。在工程上面右键菜单,[卸载项目] 即可。
D:调整
可以同时开着vs2017打开的all01.sln,和文本编辑器(比如notepad++)打开的 all01.sln。
这样在文本中修改,切换到vs2017会提示更新;在vs2017中卸载工程,在文本编辑器中会提示更新。
03 错误修复
如果没做备份或者原始all.sln被弄坏了。直接 gn gen 生成一下,不需要重新编译,即可调试。
04 结论
移除仅剩下 1400 个工程左右,调试出现崩溃的概率较低。
05 添加工程
移除工程后,有些时候,调试到需要研究的代码。因为工程没有添加,没有符号文件。调试不到需要的代码。这时需要包工程手动添加回来。
1 在未加载的堆栈处右键勾选[显示外部代码]菜单项。
2 在未加载的堆栈处右键点击[转到模块],查看项目所在输入文件名称。
3 使用Vs-Chromium的 【Code Search】搜索未加载处的关键字,找到完整的文件路径。
4 根据完整的文件路径等级,到编译目录out下面查找对应的vs工程。
比如:out\DebugX64\obj\third_party\blink\renderer\core\core.vcxproj
5 注意:找到对应输入的vs工程未必一次命中。可能还需要找到依赖工程。需要耐心。
06 增减工程引起编译内容不全问题
经过几轮删减工程项目后,在一次修改blink_core.dll模块时:修改代码后, 'ninja -C out\DebugX64 chrome’编译通过,但是运行bug。代码完全回复到出事状态编译,依然通过,但还是有运行错误。后来没有继续查找问题。重新编译了。