Usercrash¶
Description¶
The usercrash
tool gets the crash information for the crashing process in
user space. The collected information is saved as usercrash_xx under
/var/log/usercrashes/
.
Design¶
usercrash
is designed using a client/server model. The server is
autostarted at boot. The client is configured in core_pattern
, which
will be triggered when a crash occurs in user space. The client then
sends the crash event to the server. The server checks the files under
/var/log/usercrashes/
and creates a file usercrash_xx (xx means
the index of the crash file). Then it sends the file descriptor (fd) to
the client. The client collects the crash information
and saves it in the crash file. After the saving work is done, the
client notifies the server. The server cleans up.
The workflow diagram:
+--------------------------------------------------+
| |
| Server Client |
| + + |
| | Send crash event | |
| | <-----------------------+ |
| | | |
| Create usercrash_xx | |
| | | |
| | Send usercrash_xx fd | |
| +-----------------------> | |
| | | |
| | Fill usercrash_xx |
| | | |
| | Notify completion | |
| | <-----------------------+ |
| | | |
| Clean up | |
| | | |
| v v |
| |
+--------------------------------------------------+
Usage¶
The server is launched automatically at boot after this tool is enabled with instruction
sudo crashlogctl enable
, and the client is configured inusercrash-wrapper
, which is set as the app ofcore_pattern
. Inusercrash-wrapper
, it will collect and reorder the parameters of the client and default app. Once a crash occurs in user space, the client and default app will be invoked separately.The
debugger
is an independent tool to dump the debugging information of the specific process, including backtrace, stack, opened files, register values, and memory content around registers.
$ debugger <pid>
Note
You need to be root
to use the debugger
.
Source Code¶
client.c : This file is the implementation for the client of
usercrash
. The client is responsible for delivering theusercrash
event to the server, and collecting crash information and saving it to the crash file.crash_dump.c : This file is the implementation for dumping the crash information, including backtrace stack, opened files, register values, and memory content around registers.
debugger.c : This file implements a tool, which runs in command line to dump the process information listed above.
protocol.c : This file is the socket protocol implementation file.
server.c : This file is the implementation file for the server of
usercrash
. The server is responsible for creating the crash file and handling the events from the client.