summaryrefslogtreecommitdiffstats
path: root/toolkit/crashreporter/docs/index.rst
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/crashreporter/docs/index.rst')
-rw-r--r--toolkit/crashreporter/docs/index.rst195
1 files changed, 0 insertions, 195 deletions
diff --git a/toolkit/crashreporter/docs/index.rst b/toolkit/crashreporter/docs/index.rst
deleted file mode 100644
index 76ab15693..000000000
--- a/toolkit/crashreporter/docs/index.rst
+++ /dev/null
@@ -1,195 +0,0 @@
-==============
-Crash Reporter
-==============
-
-Overview
-========
-
-The **crash reporter** is a subsystem to record and manage application
-crash data.
-
-While the subsystem is known as *crash reporter*, it helps to think of
-it more as a *process dump manager*. This is because the heart of this
-subsystem is really managing process dump files and these files are
-created not only from process crashes but also from hangs and other
-exceptional events.
-
-The crash reporter subsystem is composed of a number of pieces working
-together.
-
-Breakpad
- Breakpad is a library and set of tools to make collecting process
- information (notably dumps from crashes) easy. Breakpad is a 3rd
- party project (originaly developed by Google) that is imported into
- the tree.
-
-Dump files
- Breakpad produces files called *dump files* that hold process data
- (stacks, heap data, etc).
-
-Crash Reporter Client
- The crash reporter client is a standalone executable that is launched
- to handle dump files. This application optionally submits crashes to
- Mozilla (or the configured server).
-
-Minidump Analyzer
- The minidump analyzer is a standalone executable that is launched by the
- crash reporter client or by the browser itself to extract stack traces from
- the dump files generated during a crash. It appends the stack traces to the
- .extra file associated with the crash dump.
-
-How Main-Process Crash Handling Works
-=====================================
-
-The crash handler is hooked up very early in the Gecko process lifetime.
-It all starts in ``XREMain::XRE_mainInit()`` from ``nsAppRunner.cpp``.
-Assuming crash reporting is enabled, this startup function registers an
-exception handler for the process and tells the crash reporter subsystem
-about basic metadata such as the application name and version.
-
-The registration of the crash reporter exception handler doubles as
-initialization of the crash reporter itself. This happens in
-``CrashReporter::SetExceptionHandler()`` from ``nsExceptionHandler.cpp``.
-The crash reporter figures out what application to use for reporting
-dumped crashes and where to store these dump files on disk. The Breakpad
-exception handler (really just a mechanism for dumping process state) is
-initialized as part of this function. The Breakpad exception handler is
-a ``google_breakpad::ExceptionHandler`` instance and it's stored as
-``gExceptionHandler``.
-
-As the application runs, various other systems may write *annotations*
-or *notes* to the crash reporter to indicate state of the application,
-help with possible reasons for a current or future crash, etc. These are
-performed via ``CrashReporter::AnnotateCrashReport()`` and
-``CrashReporter::AppendAppNotesToCrashReport()`` from
-``nsExceptionHandler.h``.
-
-For well running applications, this is all that happens. However, if a
-crash or similar exceptional event occurs (such as a hang), we need to
-write a crash report.
-
-When an event worthy of writing a dump occurs, the Breakpad exception
-handler is invoked and Breakpad does its thing. When Breakpad has
-finished, it calls back into ``CrashReporter::MinidumpCallback()`` from
-``nsExceptionHandler.cpp`` to tell the crash reporter about what was
-written.
-
-``MinidumpCallback()`` performs a number of actions once a dump has been
-written. It writes a file with the time of the crash so other systems can
-easily determine the time of the last crash. It supplements the dump
-file with an *extra* file containing Mozilla-specific metadata. This data
-includes the annotations set via ``CrashReporter::AnnotateCrashReport()``
-as well as time since last crash, whether garbage collection was active at
-the time of the crash, memory statistics, etc.
-
-If the *crash reporter client* is enabled, ``MinidumpCallback()`` invokes
-it. It simply tries to create a new *crash reporter client* process (e.g.
-*crashreporter.exe*) with the path to the written minidump file as an
-argument.
-
-The *crash reporter client* performs a number of roles. There's a lot going
-on, so you may want to look at ``main()`` in ``crashreporter.cpp``. First,
-stack traces are extracted from the dump via the *minidump analyzer* tool.
-The resulting traces are appended to the .extra file of the crash. Then, the
-*crash reporter client* verifies that the dump data is sane. If it isn't
-(e.g. required metadata is missing), the dump data is ignored. If dump data
-looks sane, the dump data
-is moved into the *pending* directory for the configured data directory
-(defined via the ``MOZ_CRASHREPORTER_DATA_DIRECTORY`` environment variable
-or from the UI). Once this is done, the main crash reporter UI is displayed
-via ``UIShowCrashUI()``. The crash reporter UI is platform specific: there
-are separate versions for Windows, OS X, and various \*NIX presentation
-flavors (such as GTK). The basic gist is a dialog is displayed to the user
-and the user has the opportunity to submit this dump data to a remote
-server.
-
-If a dump is submitted via the crash reporter, the raw dump files are
-removed from the *pending* directory and a file containing the
-crash ID from the remote server for the submitted dump is created in the
-*submitted* directory.
-
-If the user chooses not to submit a dump in the crash reporter UI, the dump
-files are deleted.
-
-And that's pretty much what happens when a crash/dump is written!
-
-Plugin and Child Process Crashes
-================================
-
-Crashes in plugin and child processes are also managed by the crash
-reporting subsystem.
-
-Child process crashes are handled by the ``mozilla::dom::CrashReporterParent``
-class defined in ``dom/ipc``. When a child process crashes, the toplevel IPDL
-actor should check for it by calling TakeMinidump in its ``ActorDestroy``
-Method: see ``mozilla::plugins::PluginModuleParent::ActorDestroy`` and
-``mozilla::plugins::PluginModuleParent::ProcessFirstMinidump``. That method
-is responsible for calling
-``mozilla::dom::CrashReporterParent::GenerateCrashReportForMinidump`` with
-appropriate crash annotations specific to the crash. All child-process
-crashes are annotated with a ``ProcessType`` annotation, such as "content" or
-"plugin".
-
-Submission of child process crashes is handled by application code. This
-code prompts the user to submit crashes in context-appropriate UI and then
-submits the crashes using ``CrashSubmit.jsm``.
-
-Memory Reports
-==============
-
-When a process detects that it is running low on memory, a memory report is
-saved. If the process crashes, the memory report will be included with the crash
-report. ``nsThread::SaveMemoryReportNearOOM()`` checks to see if the process is
-low on memory every 30 seconds at most and saves a report every 3 minutes at
-most. Since a child process cannot actually save to the hard drive, it instead
-notifies its parent process, which saves the report for it. If a crash does
-occur, the memory report is moved to the *pending* directory with the other dump
-data and an annotation is added to indicate the presence of the report. This
-happens in ``nsExceptionHandler.cpp``, but occurs in different functions
-depending on what process crashed. When the main process crashes, this happens
-in ``MinidumpCallback()``. When a child process crashes, it happens in
-``OnChildProcessDumpRequested()``, with the annotation being added in
-``WriteExtraData()``.
-
-Flash Process Crashes
-=====================
-
-On Windows Vista+, the Adobe Flash plugin creates two extra processes in its
-Firefox plugin to implement OS-level sandboxing. In order to catch crashes in
-these processes, Firefox injects a crash report handler into the process using the code at ``InjectCrashReporter.cpp``. When these crashes occur, the
-ProcessType=plugin annotation is present, and an additional annotation
-FlashProcessDump has the value "Sandbox" or "Broker".
-
-Plugin Hangs
-============
-
-Plugin hangs are handled as crash reports. If a plugin doesn't respond to an
-IPC message after 60 seconds, the plugin IPC code will take minidumps of all
-of the processes involved and then kill the plugin.
-
-In this case, there will be only one .ini file with the crash report metadata,
-but there will be multiple dump files: at least one for the browser process and
-one for the plugin process, and perhaps also additional dumps for the Flash
-sandbox and broker processes. All of these files are submitted together as a
-unit. Before submission, the filenames of the files are linked:
-
-- **uuid.ini** - *annotations, includes an additional_minidumps field*
-- **uuid.dmp** - *plugin process dump file*
-- **uuid-<other>.dmp** - *other process dump file as listed in additional_minidumps*
-
-Browser Hangs
-=============
-
-There is a feature of Firefox that will crash Firefox if it stops processing
-messages after a certain period of time. This feature doesn't work well and is
-disabled by default. See ``xpcom/threads/HangMonitor.cpp``. Hang crashes
-are annotated with ``Hang=1``.
-
-about:crashes
-=============
-
-If the crash reporter subsystem is enabled, the *about:crashes*
-page will be registered with the application. This page provides
-information about previous and submitted crashes.
-
-It is also possible to submit crashes from *about:crashes*.