Chromium 浏览器在 module_list.cc 中构建致命错误:检查失败

Fre*_*k.L 5 c++ browser windows chromium windows-10

我一直在尝试在 Windows 10 上构建 chromium,但在运行时遇到奇怪的错误,这似乎是由该模式引起的:

void CheckFreeLibrary(HMODULE module) {
  BOOL result = ::FreeLibrary(module);
  DCHECK(result);
}
Run Code Online (Sandbox Code Playgroud)

Chromium 启动几秒钟后会显示第一个错误。它是这样说的:

[5904:9192:0726/025753:FATAL:module_list.cc(18)] Check failed: result.
Backtrace:
    base:debug:StackTrace:StackTrace [0x0000....] (e:\projects\clones\chromium\src\base\debug\stack_trace.cc) ...
Run Code Online (Sandbox Code Playgroud)

由于我无法复制粘贴整个堆栈,因此我将添加一个屏幕截图来说明这一切的感觉: 堆栈跟踪错误

我成功构建了最后一个版本,或者至少看起来是成功的,因为使用构建说明中推荐的工具链进行编译时没有出现错误。

幸运的是,第一个错误不是模态的,之后可以浏览一下。然后,如果我将应用程序置于重负载状态(例如 Facebook 新闻源),它会突然以无声的方式停止响应。鼠标悬停效果将不再显示,重新加载页面将导致无限加载。当右键单击某些页面时,这种行为也可以重现(例如:谷歌的主页有时会这样做)。

对于默认配置无法“开箱即用”的解释是什么?如何解决这个问题?

PS:这个问题是对这个问题的补充: Windows chromium-browser fresh build stacktrace andonymous fatalErrors on runtime,如果它可以帮助了解问题的整体情况。

PS2.:我目前正在尝试从头开始重建,并进行这个微小的更改,看看效果是否更好。不过,大约 10 小时后我就能看到它(是的,在我当前的设置下构建是很痛苦的)。

void CheckFreeLibrary(HMODULE module) {
  BOOL result = ::FreeLibrary(module);
  if (!result) {
      result = ::UnmapViewOfFile(module);
  }
  DCHECK(result);
}
Run Code Online (Sandbox Code Playgroud)

更新 - 2016/07/29

使用 CheckFreeLibrary 进行测试在调试中仍然失败,但我终于找到了解决构建中问题的方法。请参阅超级用户问题中的更新 3 。我所做的是将构建配置为发布模式通过gn args. 显然,这几乎不可能进行调试,因此尚未找到有关其在调试模式下失败的原因的解决方案/解释。不过,现在已经很接近了。

更新2 - 2016/08/13

重新开始,使用存储库中的最新版本再次获得调试版本,这一次我确信找到了一些东西。事实上,在我运行完通常的更新、生成和构建过程后,我注意到win-core-*位于 Windows Kit 调试器中的一些 DLL 库没有被复制到src文件夹中,但其中一个库被认为在链接过程中存在。作为预防措施,我只是将它们全部复制以确保存在任何延迟加载或构建依赖项。第一次启动 chromium 时,错误没有出现,并认为它已经解决了问题。然而,右键单击 Google 主页也有同样的效果(没有响应,然后浏览器不再显示页面)。关闭并重新打开它后,错误开始出现。

有没有人有过这样的经历?我会对“在 Linux 上做,在这个平台上工作得更好”之类的事情感到非常高兴。不过,在不知道效果会更好的情况下,我不愿意这样做。

Sur*_*urt 0

所以

BOOL result = ::FreeLibrary(module);
Run Code Online (Sandbox Code Playgroud)

调试版本失败看看你是否有

DWORD WINAPI GetLastError(void);
Run Code Online (Sandbox Code Playgroud)

得到真正的错误。

我能猜到

模块未加载

模块为 NULL

也许某些 DEBUG 语句正在更改模块的值?