当Chrome浏览器出现“崩溃”页面时,如何获取更多信息?

73
我试图在Google Chrome中查看一个页面,但却收到了这样的提示信息:"糟糕!显示此网页时出现了问题。" 是否有办法获取更多关于发生了什么错误的信息呢?
更新:只有当JavaScript控制台可见时才会显示"糟糕"的提示信息。

54
这是一个编程问题 - 它涉及到调试。 - codeinthehole
5
这个问题被标记为“调试”,因此我不明白为什么它被关闭了。如果第一句话改为“……尝试调试……”而不是“……尝试查看……”,那么它是否会被认为是属于主题的?该问题是开发人员在调试 Chrome 中可爱的“崩溃页面”时经常遇到的问题。 - jeffa00
1
我遇到了类似的情况。当 DevTools 打开时,刷新页面时偶尔会出现“噫吁”错误。关闭 DevTools 时则从未出现过。我尝试过在 gdb 中进行调试构建和记录设置,但目前没有任何迹象表明问题所在。自从这个问题发布以来已经过去了 5 年,Aw Snap 的调试性是否有所提高? - mwcz
7个回答

17

首先,从 设置 -->> 高级 -->> 隐私和安全 启用自动发送一些系统信息和页面内容到Google来帮助检测危险的应用程序和网站

然后按照以下方式在Chrome中启用崩溃报告:

  1. 打开chrome://crashes
  2. 如果显示崩溃报告已禁用,请启用该选项。如果发生崩溃,它将在 C:\Users\{username}\AppData\Local\Google\CrashReports 中转储崩溃报告。

这将在Chrome中出现"哎呀,崩溃了"的屏幕时提供更多信息。


2
我相信当前的设置被称为“自动向Google发送一些系统信息和页面内容,以帮助检测危险的应用程序和网站”。 - mmigdol
感谢mmigdol指出这一点,我现在已经更新了选项标签,使其与当前Chrome浏览器版本完全一致。 - Tarun
13
如果我不想将这些东西发送给谷歌,只想自己使用怎么办? - Evan Carroll
3
仅显示类似于“本地崩溃 ID 1a6dcf99-0f2d-47df-93d5-0ce32c4ebd67。在2019年2月16日星期六晚上11:54:44捕获的崩溃报告尚未上传。现在发送”和“用户请求上传,但尚未上传”。文件夹为空。 - Fanky

11

我不知道非调试版本中是否有很多内容,但是尝试开启日志记录并查看显示的内容:

使用以下标志启动Chrome:--enable-logging --log-level=0

在Windows Vista上,您的日志文件位于:C:\Users\\AppData\Local\Google\Chrome\User Data\Default

在Windows XP上,您的日志文件位于:C:\Documents and Settings\\Local Settings\Application Data\Google\Chrome\User Data\Default

有关详细信息,请参见http://www.chromium.org/for-testers/enable-logging


2
非常感谢。遗憾的是,日志中没有任何有用的信息。我唯一看到的是: [1640:3808:4285503:INFO:user_script_slave.cc(179)] 将 0 个用户脚本注入到<我正在尝试加载的 .xml 文件>中。 - Dimitri C.
如果您构建调试版本,您可能会获得一个调用堆栈。 - Pierre-Antoine LaFayette
没有未捕获的异常,Chrome会捕获它并显示“噢,崩溃了”页面。我通过gdb运行了Chromium,当“噢,崩溃了”出现时没有弹出任何内容。可能是我的gdb技巧不够熟练。 - mwcz
我在移动版Chrome上遇到了这个问题 - 不知道iOS上是否有类似的情况。 - Jonathan

5
当你在即将崩溃的网站上运行DevTools时,它可能会给你一些线索。
例如,当选项卡即将达到内存极限时,调试器会在崩溃之前暂停代码(Chrome、Opera等)。可以在 内存 选项卡中检查内存使用情况。
如果原因不同,可以从命令行运行Chrome,使用--enable-logging --v=1并检查日志(系统日志和chrome_debug.log文件)。
相关内容:

macOS

如果您正在macOS上运行,此类崩溃应自动报告。可以在Console应用程序中检查并查看崩溃报告。或在Finder中找到它们,在/Library/Logs/DiagnosticReports(全局)和~/Library/Logs/DiagnosticReports(用户)中找到这些文件。

通过以下方式实时检查Chrome日志:

log stream --level debug --predicate 'processImagePath contains "Google"'

参考资料:


Linux

对于Linux,请查看: 当进程遇到分段错误时在Linux中如何生成核心转储?


1

获取Chrome崩溃转储(请参阅其他答案和搜索引擎以获取最新方法),然后您可以在调试器中打开它。

与内存相关的问题通常非常明显,例如堆是否溢出或未能快速压缩以添加新对象。 Chrome将尝试通过检测GC是否无效地标记足够的内容进行收集/压缩来避免崩溃 - “CheckIneffectiveMarkCompact”和“FatalProcessOutOfMemory”,其中GC基本上正在努力尝试一遍又一遍地回收内存,但无法做到这一点。这通常是“糟糕”的JavaScript的迹象 - 不一定是错误,而是设计缺陷,例如一次从API加载太多记录到内存中,例如在渲染数据的长列表或地图上的功能时。根据Chrome运行的设备,它很容易被攻击并关闭带有“Aw Snap”错误的站点/选项卡。

    #endif  // V8_FUZZILLI
    } else {
      fatal_callback(location,
                     is_heap_oom
                         ? "Allocation failed - JavaScript heap out of memory"
                         : "Allocation failed - process out of memory");
    }

WinDbg.exe Windows Store Edition with a Chrome crash dump .dmp file and the chromium symbols loaded


有没有办法在JS代码中捕获这个异常并防止应用程序崩溃? - undefined

0

我在Chrome浏览器上遇到了同样的问题,我使用的是Ubuntu操作系统,我只需更新Chrome并重新启动系统,问题就解决了!


-1

Chrome 升级后,我的浏览器无法使用。因此,我暂时应用了以下修复方法:您可以通过以下两种方式禁用沙盒模式

一种是运行以下命令 "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --no-sandbox

另一种是,如果您有管理员权限,则可以更新注册表。

REG ADD "HKLM\Software\Policies\Google\Chrome" /v RendererCodeIntegrityEnabled /t REG_DWORD /d 0

-4

该页面意味着浏览器内部出现了问题,建议在调试器下运行浏览器。


我没有给你的建议点踩,因为这是一个好建议。只是想指出当我的页面显示“噢,崩溃了!”时,开发者控制台会断开连接,所以很遗憾这似乎无法解决问题。 - Max Heiber

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接