2022-04-02 01:21:55 +00:00
|
|
|
|
<!--
|
2023-01-28 04:54:20 +00:00
|
|
|
|
Copyright 2014 The Crashpad Authors
|
2022-04-02 01:21:55 +00:00
|
|
|
|
|
|
|
|
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
|
|
|
you may not use this file except in compliance with the License.
|
|
|
|
|
You may obtain a copy of the License at
|
|
|
|
|
|
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
|
|
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
|
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
|
|
See the License for the specific language governing permissions and
|
|
|
|
|
limitations under the License.
|
|
|
|
|
-->
|
|
|
|
|
|
|
|
|
|
# crashpad_handler(8)
|
|
|
|
|
|
|
|
|
|
## Name
|
|
|
|
|
|
|
|
|
|
crashpad_handler—Crashpad’s exception handler server
|
|
|
|
|
|
|
|
|
|
## Synopsis
|
|
|
|
|
|
|
|
|
|
**crashpad_handler** [_OPTION…_]
|
|
|
|
|
|
|
|
|
|
## Description
|
|
|
|
|
|
|
|
|
|
This program is Crashpad’s main exception-handling server. It is responsible for
|
|
|
|
|
catching exceptions, writing crash reports, and uploading them to a crash report
|
|
|
|
|
collection server. Uploads are disabled by default, and can only be enabled by a
|
|
|
|
|
Crashpad client using the Crashpad client library, typically in response to a
|
|
|
|
|
user requesting this behavior.
|
|
|
|
|
|
|
|
|
|
On macOS, this server may be started by its initial client, in which case it
|
|
|
|
|
performs a handshake with this client via a pipe established by the client that
|
|
|
|
|
is inherited by the server, referenced by the **--handshake-fd** argument.
|
|
|
|
|
During the handshake, the server furnishes the client with a send right that the
|
|
|
|
|
client may use as an exception port. The server retains the corresponding
|
|
|
|
|
receive right, which it monitors for exception messages. When the receive right
|
|
|
|
|
loses all senders, the server exits after allowing any upload in progress to
|
|
|
|
|
complete.
|
|
|
|
|
|
|
|
|
|
Alternatively, on macOS, this server may be started from launchd(8), where it
|
|
|
|
|
receives the Mach service name in a **--mach-service** argument. It checks in
|
|
|
|
|
with the bootstrap server under this service name, and clients may look it up
|
|
|
|
|
with the bootstrap server under this service name. It monitors this service for
|
|
|
|
|
exception messages. Upon receipt of `SIGTERM`, the server exits after allowing
|
|
|
|
|
any upload in progress to complete. `SIGTERM` is normally sent by launchd(8)
|
|
|
|
|
when it determines that the server should exit.
|
|
|
|
|
|
|
|
|
|
On Windows, clients register with this server by communicating with it via the
|
|
|
|
|
named pipe identified by the **--pipe-name** argument. Alternatively, the server
|
|
|
|
|
can inherit an already-created pipe from a parent process by using the
|
|
|
|
|
**--initial-client-data** mechanism. That argument also takes all of the
|
|
|
|
|
arguments that would normally be passed in a registration message, and so
|
|
|
|
|
constitutes registration of the first client. Subsequent clients may then
|
|
|
|
|
register by communicating with the server via the pipe. During registration, a
|
|
|
|
|
client provides the server with an OS event object that it will signal should it
|
|
|
|
|
crash. The server obtains the client’s process handle and waits on the crash
|
|
|
|
|
event object for a crash, as well as the client’s process handle for the client
|
|
|
|
|
to exit cleanly without crashing. When a server started via the
|
|
|
|
|
**--initial-client-data** mechanism loses all of its clients, it exits after
|
|
|
|
|
allowing any upload in progress to complete.
|
|
|
|
|
|
|
|
|
|
On Windows, this executable is built by default as a Windows GUI app, so no
|
|
|
|
|
console will appear in normal usage. This is the version that will typically be
|
|
|
|
|
used. A second copy is also made with a `.com` extension, rather than `.exe`. In
|
|
|
|
|
this second copy, the PE header is modified to indicate that it’s a console app.
|
|
|
|
|
This is useful because the `.com` is found in the path before the `.exe`, so
|
|
|
|
|
when run normally from a shell using only the basename (without an explicit
|
|
|
|
|
`.com` or `.exe` extension), the `.com` console version will be chosen, and so
|
|
|
|
|
stdio will be hooked up as expected to the parent console so that logging output
|
|
|
|
|
will be visible.
|
|
|
|
|
|
|
|
|
|
On Linux/Android, the handler may create a crash dump for its parent process
|
|
|
|
|
using **--trace-parent-with-exception**. In this mode, the handler process
|
|
|
|
|
creates a crash dump for its parent and exits. Alternatively, the handler may
|
|
|
|
|
be launched with **--initial-client-fd** which will start the server connected
|
|
|
|
|
to an initial client. The server will exit when all connected client sockets are
|
|
|
|
|
closed.
|
|
|
|
|
|
|
|
|
|
It is not normally appropriate to invoke this program directly. Usually, it will
|
|
|
|
|
be invoked by a Crashpad client using the Crashpad client library, or started by
|
|
|
|
|
another system service. On macOS, arbitrary programs may be run with a Crashpad
|
|
|
|
|
handler by using [run_with_crashpad(1)](../tools/mac/run_with_crashpad.md) to
|
|
|
|
|
establish the Crashpad client environment before running a program.
|
|
|
|
|
|
|
|
|
|
## Options
|
|
|
|
|
|
|
|
|
|
* **--annotation**=_KEY_=_VALUE_
|
|
|
|
|
|
|
|
|
|
Sets a process-level annotation mapping _KEY_ to _VALUE_ in each crash report
|
|
|
|
|
that is written. This option may appear zero, one, or multiple times.
|
|
|
|
|
|
|
|
|
|
Most annotations should be provided by the Crashpad client as module-level
|
|
|
|
|
annotations instead of process-level annotations. Module-level annotations
|
|
|
|
|
are more flexible in that they can be modified and cleared during the client
|
|
|
|
|
program’s lifetime. Module-level annotations can be set via the Crashpad
|
|
|
|
|
client library. Process-level annotations are useful for annotations that the
|
|
|
|
|
collection server requires be present, that have fixed values, and for cases
|
|
|
|
|
where a program that does not use the Crashpad client library is being
|
|
|
|
|
monitored.
|
|
|
|
|
|
|
|
|
|
Breakpad-type collection servers only require the `"prod"` and `"ver"`
|
|
|
|
|
annotations, which should be set to the product name or identifier and
|
|
|
|
|
product version, respectively. It is unusual to specify other annotations as
|
|
|
|
|
process-level annotations via this argument.
|
|
|
|
|
|
|
|
|
|
* **--database**=_PATH_
|
|
|
|
|
|
|
|
|
|
Use _PATH_ as the path to the Crashpad crash report database. This option is
|
|
|
|
|
required. Crash reports are written to this database, and if uploads are
|
|
|
|
|
enabled, uploaded from this database to a crash report collection server. If
|
|
|
|
|
the database does not exist, it will be created, provided that the parent
|
|
|
|
|
directory of _PATH_ exists.
|
|
|
|
|
|
|
|
|
|
* **--handshake-fd**=_FD_
|
|
|
|
|
|
|
|
|
|
Perform the handshake with the initial client on the file descriptor at _FD_.
|
|
|
|
|
Either this option or **--mach-service**, but not both, is required. This
|
|
|
|
|
option is only valid on macOS.
|
|
|
|
|
|
|
|
|
|
* **--initial-client-data**=*HANDLE_request_crash_dump*,*HANDLE_request_non_crash_dump*,*HANDLE_non_crash_dump_completed*,*HANDLE_first_pipe_instance*,*HANDLE_client_process*,*Address_crash_exception_information*,*Address_non_crash_exception_information*,*Address_debug_critical_section*
|
|
|
|
|
|
|
|
|
|
Register the initial client using the inherited handles and data provided.
|
|
|
|
|
For more information on the argument’s format, see the implementations of
|
|
|
|
|
`CrashpadClient` and `ExceptionHandlerServer`. Either this option or
|
|
|
|
|
**--pipe-name**, but not both, is required. This option is only valid on
|
|
|
|
|
Windows.
|
|
|
|
|
|
|
|
|
|
When this option is present, the server creates a new named pipe at a random
|
|
|
|
|
name and informs its client of the name. The server waits for at least one
|
|
|
|
|
client to register, and exits when all clients have exited, after waiting for
|
|
|
|
|
any uploads in progress to complete.
|
|
|
|
|
|
|
|
|
|
* **--initial-client-fd**=_FD_
|
|
|
|
|
|
|
|
|
|
Wait for client requests on _FD_. Either this option or
|
|
|
|
|
**--trace-parent-with-exception**, but not both, is required. The handler
|
|
|
|
|
exits when all client connections have been closed. This option is only valid
|
|
|
|
|
on Linux platforms.
|
|
|
|
|
|
|
|
|
|
* **--mach-service**=_SERVICE_
|
|
|
|
|
|
|
|
|
|
Check in with the bootstrap server under the name _SERVICE_. Either this
|
|
|
|
|
option or **--handshake-fd**, but not both, is required. This option is only
|
|
|
|
|
valid on macOS.
|
|
|
|
|
|
|
|
|
|
_SERVICE_ may already be reserved with the bootstrap server in cases where
|
|
|
|
|
this tool is started by launchd(8) as a result of a message being sent to a
|
|
|
|
|
service declared in a job’s `MachServices` dictionary (see launchd.plist(5)).
|
|
|
|
|
The service name may also be completely unknown to the system.
|
|
|
|
|
|
|
|
|
|
* **--metrics-dir**=_DIR_
|
|
|
|
|
|
|
|
|
|
Metrics information will be written to _DIR_. This option only has an effect
|
|
|
|
|
when built as part of Chromium. In non-Chromium builds, and in the absence of
|
|
|
|
|
this option, metrics information will not be written.
|
|
|
|
|
|
|
|
|
|
* **--monitor-self**
|
|
|
|
|
|
|
|
|
|
Causes a second instance of the Crashpad handler program to be started,
|
|
|
|
|
monitoring the original instance for exceptions. The original instance will
|
|
|
|
|
become a client of the second one. The second instance will be started with
|
|
|
|
|
the same **--annotation**, **--database**, **--monitor-self-annotation**,
|
|
|
|
|
**--no-rate-limit**, **--no-upload-gzip**, and **--url** arguments as the
|
|
|
|
|
original one. The second instance will always be started with a
|
|
|
|
|
**--no-periodic-tasks** argument, and will not be started with a
|
|
|
|
|
**--metrics-dir** argument even if the original instance was.
|
|
|
|
|
|
|
|
|
|
Where supported by the underlying operating system, the second instance will
|
|
|
|
|
be restarted should it exit before the first instance. The second instance
|
|
|
|
|
will not be eligible to be started asynchronously.
|
|
|
|
|
|
|
|
|
|
* **--monitor-self-annotation**=_KEY_=_VALUE_
|
|
|
|
|
|
|
|
|
|
Sets a module-level annotation mapping _KEY_ to _VALUE_ in the Crashpad
|
|
|
|
|
handler. This option may appear zero, one, or more times.
|
|
|
|
|
|
|
|
|
|
If **--monitor-self** is in use, the second instance of the Crashpad handler
|
|
|
|
|
program will find these annotations stored in the original instance and will
|
|
|
|
|
include them in any crash reports written for the original instance.
|
|
|
|
|
|
|
|
|
|
These annotations will only appear in crash reports written for the Crashpad
|
|
|
|
|
handler itself. To apply a process-level annotation to all crash reports
|
|
|
|
|
written by an instance of the Crashpad handler, use **--annotation** instead.
|
|
|
|
|
|
|
|
|
|
* **--monitor-self-argument**=_ARGUMENT_
|
|
|
|
|
|
|
|
|
|
When directed by **--monitor-self** to start a second instance of the
|
|
|
|
|
Crashpad handler program, the second instance will be started with _ARGUMENT_
|
|
|
|
|
as one of its arguments. This option may appear zero, one, or more times.
|
|
|
|
|
This option has no effect in the absence of **--monitor-self**.
|
|
|
|
|
|
|
|
|
|
This supports embedding the Crashpad handler into a multi-purpose executable
|
|
|
|
|
that dispatches to the desired entry point based on a command-line argument.
|
|
|
|
|
To prevent excessive accumulation of handler processes, _ARGUMENT_ must not
|
|
|
|
|
be `--monitor-self`.
|
|
|
|
|
|
|
|
|
|
* **--no-identify-client-via-url**
|
|
|
|
|
|
|
|
|
|
Do not add client-identifying fields to the URL. By default, `"prod"`,
|
|
|
|
|
`"ver"`, and `"guid"` annotations are added to the upload URL as name-value
|
|
|
|
|
pairs `"product"`, `"version"`, and `"guid"`, respectively. Using this
|
|
|
|
|
option disables that behavior.
|
|
|
|
|
|
|
|
|
|
* **--no-periodic-tasks**
|
|
|
|
|
|
|
|
|
|
Do not scan for new pending crash reports or prune the crash report database.
|
|
|
|
|
Only crash reports recorded by this instance of the Crashpad handler will
|
|
|
|
|
become eligible for upload in this instance, and only a single initial upload
|
|
|
|
|
attempt will be made.
|
|
|
|
|
|
|
|
|
|
This option is not intended for general use. It is provided to prevent
|
|
|
|
|
multiple instances of the Crashpad handler from duplicating the effort of
|
|
|
|
|
performing the same periodic tasks. In normal use, the first instance of the
|
|
|
|
|
Crashpad handler will assume the responsibility for performing these tasks,
|
|
|
|
|
and will provide this argument to any second instance. See
|
|
|
|
|
**--monitor-self**.
|
|
|
|
|
|
|
|
|
|
* **--no-rate-limit**
|
|
|
|
|
|
|
|
|
|
Do not rate limit the upload of crash reports. By default uploads are
|
|
|
|
|
throttled to one per hour. Using this option disables that behavior, and
|
|
|
|
|
Crashpad will attempt to upload all captured reports.
|
|
|
|
|
|
|
|
|
|
* **--no-upload-gzip**
|
|
|
|
|
|
|
|
|
|
Do not use `gzip` compression for uploaded crash reports. Normally, the
|
|
|
|
|
entire request body is compressed into a `gzip` stream and transmitted with
|
|
|
|
|
`Content-Encoding: gzip`. This option disables compression, and is intended
|
|
|
|
|
for use with collection servers that don’t accept uploads compressed in this
|
|
|
|
|
way.
|
|
|
|
|
|
|
|
|
|
* **--no-write-minidump-to-database**
|
|
|
|
|
|
|
|
|
|
Do not write the minidump to database. Normally, the minidump is written to
|
|
|
|
|
database for upload. Use this option with **--write-minidump-to-log** to
|
|
|
|
|
only write the minidump to log. This option is only available to Android.
|
|
|
|
|
|
|
|
|
|
* **--pipe-name**=_PIPE_
|
|
|
|
|
|
|
|
|
|
Listen on the given pipe name for connections from clients. _PIPE_ must be of
|
|
|
|
|
the form `\\.\pipe\<somename>`. Either this option or
|
|
|
|
|
**--initial-client-data**, but not both, is required. This option is only
|
|
|
|
|
valid on Windows.
|
|
|
|
|
|
|
|
|
|
When this option is present, the server creates a named pipe at _PIPE_, a
|
|
|
|
|
name known to both the server and its clients. The server continues running
|
|
|
|
|
even after all clients have exited.
|
|
|
|
|
|
|
|
|
|
* **--reset-own-crash-exception-port-to-system-default**
|
|
|
|
|
|
|
|
|
|
Causes the exception handler server to set its own crash handler to the
|
|
|
|
|
system default before beginning operation. This is only expected to be useful
|
|
|
|
|
in cases where the server inherits an inappropriate crash handler from its
|
|
|
|
|
parent process. This option is only valid on macOS. Use of this option is
|
|
|
|
|
discouraged. It should not be used absent extraordinary circumstances.
|
|
|
|
|
|
|
|
|
|
* **--sanitization-information**=_SANITIZATION-INFORMATION-ADDRESS_
|
|
|
|
|
|
|
|
|
|
Provides sanitization settings in a SanitizationInformation struct at
|
|
|
|
|
_SANITIZATION-INFORMATION-ADDRESS_. This option requires
|
|
|
|
|
**--trace-parent-with-exception** and is only valid on Linux platforms.
|
|
|
|
|
|
|
|
|
|
* **--shared-client-connection**
|
|
|
|
|
|
|
|
|
|
Indicates that the file descriptor provided by **--initial-client-fd** is
|
|
|
|
|
shared among mulitple clients. Using a broker process is not supported for
|
|
|
|
|
clients using this option. This option is only valid on Linux platforms.
|
|
|
|
|
|
|
|
|
|
* **--trace-parent-with-exception**=_EXCEPTION-INFORMATION-ADDRESS_
|
|
|
|
|
|
|
|
|
|
Causes the handler process to trace its parent process and exit. The parent
|
|
|
|
|
process should have an ExceptionInformation struct at
|
|
|
|
|
_EXCEPTION-INFORMATION-ADDRESS_. This option is only valid on Linux
|
|
|
|
|
platforms.
|
|
|
|
|
|
|
|
|
|
* **--url**=_URL_
|
|
|
|
|
|
|
|
|
|
If uploads are enabled, sends crash reports to the Breakpad-type crash report
|
|
|
|
|
collection server at _URL_. Uploads are disabled by default, and can only be
|
|
|
|
|
enabled for a database by a Crashpad client using the Crashpad client
|
|
|
|
|
library, typically in response to a user requesting this behavior. If this
|
|
|
|
|
option is not specified, this program will behave as if uploads are disabled.
|
|
|
|
|
|
|
|
|
|
* **--use-cros-crash-reporter**
|
|
|
|
|
|
|
|
|
|
Causes crash reports to be passed via an in-memory file to
|
|
|
|
|
`/sbin/crash_reporter` instead of storing them in the database. The database
|
|
|
|
|
is still used for Crashpad settings. This option is only valid on Chromium
|
|
|
|
|
OS.
|
|
|
|
|
|
|
|
|
|
* **--write-minidump-to-log**
|
|
|
|
|
|
|
|
|
|
Write the minidump to log. By default the minidump is only written to
|
|
|
|
|
database. Use this option with **--no-write-minidump-to-database** to only
|
|
|
|
|
write the minidump to log. This option is only available to Android.
|
|
|
|
|
|
|
|
|
|
* **--help**
|
|
|
|
|
|
|
|
|
|
Display help and exit.
|
|
|
|
|
|
|
|
|
|
* **--version**
|
|
|
|
|
|
|
|
|
|
Output version information and exit.
|
|
|
|
|
|
|
|
|
|
## Exit Status
|
|
|
|
|
|
|
|
|
|
* **0**
|
|
|
|
|
|
|
|
|
|
Success.
|
|
|
|
|
|
|
|
|
|
* **1**
|
|
|
|
|
|
|
|
|
|
Failure, with a message printed to the standard error stream.
|
|
|
|
|
|
|
|
|
|
## See Also
|
|
|
|
|
|
|
|
|
|
[catch_exception_tool(1)](../tools/mac/catch_exception_tool.md),
|
|
|
|
|
[crashpad_database_util(1)](../tools/crashpad_database_util.md),
|
|
|
|
|
[generate_dump(1)](../tools/generate_dump.md),
|
|
|
|
|
[run_with_crashpad(1)](../tools/mac/run_with_crashpad.md)
|
|
|
|
|
|
|
|
|
|
## Resources
|
|
|
|
|
|
|
|
|
|
Crashpad home page: https://crashpad.chromium.org/.
|
|
|
|
|
|
|
|
|
|
Report bugs at https://crashpad.chromium.org/bug/new.
|
|
|
|
|
|
|
|
|
|
## Copyright
|
|
|
|
|
|
|
|
|
|
Copyright 2014 [The Crashpad
|
2023-01-28 04:54:20 +00:00
|
|
|
|
Authors](https://chromium.googlesource.com/crashpad/crashpad/+/main/AUTHORS).
|
2022-04-02 01:21:55 +00:00
|
|
|
|
|
|
|
|
|
## License
|
|
|
|
|
|
|
|
|
|
Licensed under the Apache License, Version 2.0 (the “License”);
|
|
|
|
|
you may not use this file except in compliance with the License.
|
|
|
|
|
You may obtain a copy of the License at
|
|
|
|
|
|
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
|
|
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
|
|
|
distributed under the License is distributed on an “AS IS” BASIS,
|
|
|
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
|
|
See the License for the specific language governing permissions and
|
|
|
|
|
limitations under the License.
|