vs2017 调试 chromium 频繁崩溃

本文探讨了在使用VS2017调试Chromium代码时遇到的频繁崩溃问题,提供了多种可能的解决方案,包括修改调试设置、清理缓存、调整内存使用策略等,并分享了调试x64版本Chromium的缓解效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

01 vs2017 调试chromium 频繁崩溃

在调试chromium代码的时候,vs2017有时会频繁出现崩溃。

优先尝试:
工具==>选项==>调试==>常规
[一个进程中断时则中断所有进程] 的勾选去掉。

还可以尝试如下操作:
1 尝试删除项目文件夹下面的.vs文件夹
2 %LocalAppData%\Microsoft\VisualStudio\15.0_xxx
3 尝试安全模式启动vs2017
在相关路径下(C:\Program Files (x86)\Microsoft Visual Studio\2017\versioname\Common7\IDE )运行devenv /safemode

另外:编译chromium 最好不要安装windows 驱动开发的sdk。

4 不要加载太多符号文件
工具==>选项==>调试==>符号==>只加载指定项
在这里插入图片描述

02 其他尝试

不知为何,更新了vs2017以后,又把chromium代码更新到 71,编译debug/Release都正常。调试debug版本,vs2017会自动无提示重启。看vs2017异常日志。提示内存不足。实际上是32GB的内存。应该不存在内存不足的问题。升级后,无法退回到15.7版本。也没找到可以仅仅安装15.7,不带15.9的安装方法。

尝试了一下各种方法。都没有解决调试崩溃的问题。

直接换装 15.9.2/15.9.1/15.8,调试chromium 71.0.3538.xxx依然崩溃(运行正常)。
卸载重新安装15.9.2,调试依然崩溃。
安装15.7.x(14.14 toolset),需要手工删除 Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.14.26405。这里面是arm相关的头文件。不知道为啥win10 安装会带上。不过,调试 chromium的时候依然崩溃。

依次卸载vs2017以安装插件测试,调试chromium依然崩溃。

做如下操作也无效果
devenv /resetuserdata
devenv /resetsettings
管理员权限:
cd D:\install\Microsoft Visual Studio\2017\Community\Common7\IDE\PublicAssemblies
gacutil -i Microsoft.VisualStudio.Shell.Interop.11.0.dll

清理vs2017的所有临时缓存,无效果

03 问题缓解

调试chromium的x64位版本。问题得到缓解,崩溃概率稍微降低。
vs2017虽然还是32位程序,但是调试x64的chromium,不崩溃了。
整个过程,vs2017占用内存不超过4GB,chromium总内存调试时,最大不到1GB。
如果调试chromium x86版本,设置断点后,就会频繁崩溃。调试chromium x64没这个问题。

附chromium(zdx) 32位程序崩溃时内存使用情况图,如下:chrome大约占用500MB, vs2017占用 2.9GB。处于调试状态后,一般就会崩溃。

在这里插入图片描述

应该是VS+被调试程序的共内存数大约32位程序限制,就会崩溃。这个时候,vs2017崩溃,不会有提示。查看vs2017的运行日志(%temp%\MSBuild_pid-*),错误报告如下:

vs2017错误日志:%temp%\MSBuild_pid-2392_bbee76ab853743a28f0b6f96d8e6378e.failure.txt

UNHANDLED EXCEPTIONS FROM PROCESS 2392:
=====================
2018-11-23 10:24:23
System.OutOfMemoryException: 没有足够的内存继续执行程序。
   在 System.Windows.Media.Composition.DUCE.Channel.BeginCommand(Byte* pbCommandData, Int32 cbSize, Int32 cbExtra)
   在 System.Windows.Media.GlyphRun.CreateOnChannel(Channel channel)
   在 System.Windows.Media.GlyphRun.System.Windows.Media.Composition.DUCE.IResource.AddRefOnChannel(Channel channel)
   在 System.Windows.Media.RenderData.System.Windows.Media.Composition.DUCE.IResource.AddRefOnChannel(Channel channel)
   在 System.Windows.UIElement.RenderContent(RenderContext ctx, Boolean isOnChannel)
   在 System.Windows.Media.Visual.RenderRecursive(RenderContext ctx)
   在 System.Windows.Media.Visual.UpdateChildren(RenderContext ctx, ResourceHandle handle)
   在 System.Windows.Media.Visual.RenderRecursive(RenderContext ctx)
   在 System.Windows.Media.Visual.UpdateChildren(RenderContext ctx, ResourceHandle handle)
   在 System.Windows.Media.Visual.RenderRecursive(RenderContext ctx)
   在 System.Windows.Media.Visual.UpdateChildren(RenderContext ctx, ResourceHandle handle)
   在 System.Windows.Media.Visual.RenderRecursive(RenderContext ctx)
   在 System.Windows.Media.Visual.UpdateChildren(RenderContext ctx, ResourceHandle handle)
   在 System.Windows.Media.Visual.RenderRecursive(RenderContext ctx)
   在 System.Windows.Media.Visual.UpdateChildren(RenderContext ctx, ResourceHandle handle)
   在 System.Windows.Media.Visual.RenderRecursive(RenderContext ctx)
   在 System.Windows.Media.Visual.Render(RenderContext ctx, UInt32 childIndex)
   在 System.Windows.Media.CompositionTarget.Compile(Channel channel)
   在 System.Windows.Media.CompositionTarget.System.Windows.Media.ICompositionTarget.Render(Boolean inResize, Channel channel)
   在 System.Windows.Media.MediaContext.Render(ICompositionTarget resizedCompositionTarget)
   在 System.Windows.Media.MediaContext.RenderMessageHandlerCore(Object resizedCompositionTarget)
   在 System.Windows.Media.MediaContext.RenderMessageHandler(Object resizedCompositionTarget)
   在 System.Windows.Media.MediaContext.Resize(ICompositionTarget resizedCompositionTarget)
   在 System.Windows.Interop.HwndTarget.OnResize()
   在 System.Windows.Interop.HwndTarget.HandleMessage(WindowMessage msg, IntPtr wparam, IntPtr lparam)
   在 System.Windows.Interop.HwndSource.HwndTargetFilterMessage(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
   在 MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
   在 MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
   在 System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
   在 System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
   在 System.Windows.Threading.Dispatcher.LegacyInvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs)
   在 MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
   在 MS.Win32.UnsafeNativeMethods.CallWindowProc(IntPtr wndProc, IntPtr hWnd, Int32 msg, IntPtr wParam, IntPtr lParam)
   在 MS.Win32.HwndSubclass.DefWndProcWrapper(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
   在 MS.Win32.UnsafeNativeMethods.CallWindowProc(IntPtr wndProc, IntPtr hWnd, Int32 msg, IntPtr wParam, IntPtr lParam)
   在 MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
===================

在这里插入图片描述

04 停用vs2017的 ClangFormat

工具==>文本编辑器==>C/C++==>格式设置==>不勾选[启用ClangFormat支持]

尝试用vs自带的clang2调试,效果一样。(默认使用clang编译)

05 崩溃概率极大的一处断点

chromium 71.0.3578.65
vs2017 15.9.2

src\google_apis\gaia\gaia_auth_fetcher.cc
void GaiaAuthFetcher::OnURLLoadComplete(

单进程调试也崩溃 --single-process
单进程禁用插件调试也崩溃 --single-process --disable-plugins

06 更新vs2017 企业版测试,问题依旧

按照vs2017企业版本,带15.9.2,15.7 toolset,问题依然存在。

工具 ==> 选项 ==> IntelliTrace ⇒ 高级 ⇒ [每个记录所占用的最大磁盘空间(A)],选择100MB
工具 ==> 选项 ==> 调试 ⇒ 符号 ⇒ [仅加载指定的模块]
诊断空间 ⇒ 属性 ⇒ 常规 ⇒ [去掉 “启用资源使用限制”]

07 在微软官网社区找到一个提问。没解决

Crash when debugging chromium
你已就此问题进行表决
报告人 alson,报告时间 2018/8/30 下午8:54:52
正在考虑Visual Studio 2017 version 15.8Windows 10.0Debuggercrash
Crash when debugging chromium
set up some break points and crashes all the time.
Did a crash dump

2018/9/11 上的 Cagri (Charlie) Aslan [MSFT]
Thanks for the feedback. Looking at the dump, Visual Studio is running out of memory. We are working on improving our memory usage during debugging for the future releases of VS. In the meantime, you can try selecting ‘load symbols only for specified modules’ option in the symbol settings dialog to help with the memory usage in the IDE.

2018/11/23 上的 wstcwps
这个问题应该是 vs2017+被调试程序的总内存>3.2GB引起的。vs2017的运行日志,在崩溃时显示如下。UNHANDLED EXCEPTIONS FROM PROCESS 3520:=====================2018-11-23 10:47:20System.OutOfMemoryException: 没有足够的内存继续执行程序。 在 System.Windows.Media.Composition.DUCE.Channel.BeginCommand(Byte* pbCommandData, Int32 cbSize, Int32 cbExtra) 在 System.Windows.Media.GlyphRun.CreateOnChannel(Channel channel) 在 System.Windows.Media.GlyphRun.System.Windows.Media.Composition.DUCE.IResource.AddRefOnChannel(Channel channel)被调试的程序采用x86的时候,设置断点调试,崩溃率极高。无法工作。把被调试程序改为x64位编译时,崩溃频率有所降低。观察下来,主要时被调试程序,总体占用内存在调试时比x86编译少。我本机调试发生崩溃时, vs2017的总内存占用大约 2.9GB。x86 chromium 内存占用大约0.5GB;x64 chromium内存占用大约0.3GB左右。还没想出解决思路。少设断点,在调试到断点处稍微等待后,在进行下一步操作。崩溃率会降低。

08 另外一例情况

vs2017 15.6.6 chromium67,也出现过调试到断点崩溃情况,不过频率不是特别高(大约10%吧),基本是电脑运行久了会出现,vs重启后就好了,x86/x64情况差不多,影响倒不大就没分析原因,重启电脑效果更好,应该还是内存相关问题。
这一列中,编译关闭了clang选项。is_clang=false

09 终极解决办法

1 vs2017工程中仅加载自己调试的模块
2 仅加载自己调试需要的符号文件
工具 ==> 选项 ==> 调试 ⇒ 符号 ⇒ [仅加载指定的模块]

10 不知道如何[只安装vs2017的老版本]?

很遗憾,vs2017升级到15.9.0/.1/.2版本后,没找到怎么仅仅按照老版本15.7.x。可以按照15.7.x 的toolset。但是默认一定会被按照19.2。vs也越来越体贴了。

11 英文版本和中文版本没有区别

安装英文语言包,切换到英文版本调试,出现该问题的频率基本不变。
工具 ⇒ 选项 ⇒ 环境 ⇒ 区域设置 ⇒ 语言(切换到English,重启vs2017)

12 期待vs2019

根据微软官方宣传,vs2019中将解决特大工程内存不足类问题。
期待vs2019 update2, 如果真能解决内存异常问题,调试tensorflow代码能方便些。期待中…
https://docs.microsoft.com/zh-cn/visualstudio/releases/2019/release-notes-preview#debugging
微软官方宣传语:对于在 Windows 上运行的 C++ 应用程序,PDB 现可在单独的 64 位进程中加载。 此更改解决了在调试包含大量模块和 PDB 的应用程序时,由调试程序耗尽内存导致的一系列故障。
在这里插入图片描述

<think>好的,我现在需要帮助用户解决Google Chrome在Mac上频繁崩溃或意外关闭的问题。首先,我要根据用户提供的引用内容,看看有没有相关的信息可以利用。用户引用了三个来源,其中引用1提到了Mac OS环境下使用Chrome的情况,引用2讨论了Chrome的沙盒技术和稳定性,引用3是一个关于Chromium命令行参数的链接。不过,用户的问题是关于崩溃问题的解决,所以可能需要结合这些引用中的信息,但更多的可能需要通用的故障排除步骤。 首先,我应该回忆常见的Chrome崩溃原因,比如插件冲突、缓存问题、系统或浏览器版本过旧、资源占用过高等。然后,结合Mac系统的特性,比如权限问题或与其他软件的兼容性。接下来,需要按照步骤逐一排查,从最简单的步骤开始,逐步深入。比如,先建议用户更新浏览器和系统,然后检查扩展程序,清除缓存,最后考虑更复杂的操作如重置浏览器或使用命令行参数。 在引用中提到的沙盒技术(引用2)虽然提高了稳定性,但崩溃可能还是由其他因素引起,比如某个标签页的问题,但由于沙盒的存在,可能不会导致整个浏览器崩溃,但用户遇到的情况可能是个别情况。此外,引用3提供的命令行参数链接可能有用,比如使用某些参数来禁用GPU加速或开启开发者工具,但需要谨慎建议用户使用这些高级选项,避免造成其他问题。 还需要确保回答结构清晰,分步骤说明,每个步骤有具体的操作指导,比如如何进入设置、如何禁用扩展等。同时,要使用中文,符合用户要求,并且生成相关问题,如用户提供的示例中的格式。此外,回答中引用的部分需要正确标注引用标识,比如引用1和引用2中的相关内容,但可能不一定直接相关,所以需要判断是否需要引用。例如,沙盒技术可能和崩溃问题有关联,但用户的问题可能更多是其他原因,所以可能不需要特别引用,但如果有相关的点可以提及的话。 最后,生成相关问题需要考虑用户可能进一步想知道的内容,比如如何预防崩溃、如何备份数据、如何诊断问题根源等。要确保问题相关且有逻辑性,帮助用户深入了解解决方案。</think>### Google Chrome在Mac上频繁崩溃的解决方案 #### 1. 基础排查与更新 - **检查浏览器版本**:进入Chrome设置 > 关于Chrome,确保版本为最新。过时版本可能存在兼容性问题[^1]。 - **更新操作系统**:前往Mac的「系统偏好设置 > 软件更新」,安装最新的Mac OS补丁,系统级更新常包含关键修复。 #### 2. 排除插件/扩展冲突 - **进入无痕模式**:使用快捷键`Command+Shift+N`打开无痕模式(不加载扩展)。若此时无崩溃,则可能是扩展冲突。 - **禁用所有扩展**: 1. 访问`chrome://extensions` 2. 逐个关闭扩展,观察崩溃是否停止 3. 重点排查广告拦截器、翻译工具等常驻扩展[^1] #### 3. 清理浏览器数据 - **清除缓存与Cookie**: ```bash # 通过Chrome设置操作: 设置 > 隐私和安全 > 清除浏览数据 > 选择「缓存的图片和文件」「Cookie及其他网站数据」 ``` - **重置浏览器设置**: 设置 > 高级 > 重置设置 > 还原原始默认设置 #### 4. 硬件加速与进程管理 - **禁用硬件加速**: 设置 > 系统 > 关闭「使用硬件加速模式」 (Mac部分显卡驱动与Chrome存在兼容问题) - **监控资源占用**: 通过Mac「活动监视器」查看Chrome进程的CPU/内存占用,异常进程可通过`结束任务`强制关闭。 #### 5. 高级修复方案 - **创建新用户配置文件**: 删除`~/Library/Application Support/Google/Chrome`目录(先备份书签与密码) - **使用命令行参数调试**: ```bash # 禁用GPU加速 open -a "Google Chrome" --args --disable-gpu # 启用崩溃日志输出 open -a "Google Chrome" --args --enable-logging --v=1 ``` 日志文件路径:`~/Library/Application Support/Google/Chrome/chrome_debug.log`[^3] #### 6. 系统级修复 - **修复磁盘权限**: 启动「磁盘工具」> 选择Macintosh HD > 点击「急救」执行修复 - **重装Chrome**: 1. 完全卸载:使用AppCleaner等工具清除残留文件 2. 从官网下载最新安装包
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值