It looks like this is very nearly ready in upstream Chromium, apparently just blocked on [this CL](https://chromium-review.googlesource.com/c/crashpad/crashpad/+/2037803), which has to do with an upload issue on Fedora.

Upstream tracking issue: https://bugs.chromium.org/p/crashpad/issues/detail?id=30

Once this CL is landed we should consider enabling Crashpad on Linux and removing our Breakpad-related code.
shell/app/electron_main.cc
} arguments;
  if (!arguments.argv)
    return -1;
#ifdef _DEBUG
  
  static const char kCI[] = "CI";
  if (IsEnvSet(kCI)) {
    _CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_DEBUG | _CRTDBG_MODE_FILE);
    _CrtSetReportFile(_CRT_ERROR, _CRTDBG_FILE_STDERR);
    _CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_DEBUG | _CRTDBG_MODE_FILE);
    _CrtSetReportFile(_CRT_ASSERT, _CRTDBG_FILE_STDERR);
    _set_error_mode(_OUT_TO_STDERR);
  }
#endif
#if BUILDFLAG(ENABLE_RUN_AS_NODE)
  bool run_as_node =
      electron::fuses::IsRunAsNodeEnabled() && IsEnvSet(electron::kRunAsNode);
#else
  bool run_as_node = false;
#endif
  
  if (run_as_node || !IsEnvSet("ELECTRON_NO_ATTACH_CONSOLE"))
    base::RouteStdioToConsole(false);
  std::vector<char*> argv(arguments.argc);
  std::transform(arguments.argv, arguments.argv + arguments.argc, argv.begin(),
                 [](auto& a) { return _strdup(base::WideToUTF8(a).c_str()); });