xref: /aosp_15_r20/external/google-breakpad/docs/windows_client_integration.md (revision 9712c20fc9bbfbac4935993a2ca0b3958c5adad2)
1*9712c20fSFrederick Mayle# Windows Integration overview
2*9712c20fSFrederick Mayle
3*9712c20fSFrederick Mayle## Windows Client Code
4*9712c20fSFrederick Mayle
5*9712c20fSFrederick MayleThe Windows client code is in the `src/client/windows` directory of the tree.
6*9712c20fSFrederick MayleSince the header files are fairly well commented some specifics are purposely
7*9712c20fSFrederick Mayleomitted from this document.
8*9712c20fSFrederick Mayle
9*9712c20fSFrederick Mayle## Integration of minidump-generation
10*9712c20fSFrederick Mayle
11*9712c20fSFrederick MayleOnce you build the solution inside `src/client/windows`, an output file of
12*9712c20fSFrederick Mayle`exception_handler.lib` will be generated. You can either check this into your
13*9712c20fSFrederick Mayleproject's directory or build directly from the source, as the project itself
14*9712c20fSFrederick Mayledoes.
15*9712c20fSFrederick Mayle
16*9712c20fSFrederick MayleEnabling Breakpad in your application requires you to `#include
17*9712c20fSFrederick Mayle"exception_handler.h"` and instantiate the `ExceptionHandler` object like so:
18*9712c20fSFrederick Mayle
19*9712c20fSFrederick Mayle```
20*9712c20fSFrederick Mayle  handler = new ExceptionHandler(const wstring& dump_path,
21*9712c20fSFrederick Mayle                                                              FilterCallback filter,
22*9712c20fSFrederick Mayle                                                              MinidumpCallback callback,
23*9712c20fSFrederick Mayle                                                              void* callback_context,
24*9712c20fSFrederick Mayle                                                              int handler_types,
25*9712c20fSFrederick Mayle                                                              MINIDUMP_TYPE dump_type,
26*9712c20fSFrederick Mayle                                                              const wchar_t* pipe_name,
27*9712c20fSFrederick Mayle                                                              const CustomClientInfo* custom_info);
28*9712c20fSFrederick Mayle```
29*9712c20fSFrederick Mayle
30*9712c20fSFrederick MayleThe parameters, in order, are:
31*9712c20fSFrederick Mayle
32*9712c20fSFrederick Mayle*   pathname for minidumps to be written to - this is ignored if OOP dump
33*9712c20fSFrederick Mayle    generation is used
34*9712c20fSFrederick Mayle*   A callback that is called when the exception is first handled - you can
35*9712c20fSFrederick Mayle    return true/false here to continue/stop exception processing
36*9712c20fSFrederick Mayle*   A callback that is called after minidumps have been written
37*9712c20fSFrederick Mayle*   Context for the callbacks
38*9712c20fSFrederick Mayle*   Which exceptions to handle - see `HandlerType` enumeration in
39*9712c20fSFrederick Mayle    exception\_handler.h
40*9712c20fSFrederick Mayle*   The type of minidump to generate, using the `MINIDUMP_TYPE` definitions in
41*9712c20fSFrederick Mayle    `DbgHelp.h`
42*9712c20fSFrederick Mayle*   A pipe name that can be used to communicate with a crash generation server
43*9712c20fSFrederick Mayle*   A pointer to a CustomClientInfo class that can be used to send custom data
44*9712c20fSFrederick Mayle    along with the minidump when using OOP generation
45*9712c20fSFrederick Mayle
46*9712c20fSFrederick MayleYou can also see `src/client/windows/tests/crash_generation_app/*` for a sample
47*9712c20fSFrederick Mayleapp that uses OOP generation.
48*9712c20fSFrederick Mayle
49*9712c20fSFrederick Mayle## OOP Minidump Generation
50*9712c20fSFrederick Mayle
51*9712c20fSFrederick MayleFor out of process minidump generation, more work is needed. If you look inside
52*9712c20fSFrederick Mayle`src/client/windows/crash_generation`, you will see a file called
53*9712c20fSFrederick Mayle`crash_generation_server.h`. This file is the interface for a crash generation
54*9712c20fSFrederick Mayleserver, which must be instantiated with the same pipe name that is passed to the
55*9712c20fSFrederick Mayleclient above. The logistics of running a separate process that instantiates the
56*9712c20fSFrederick Maylecrash generation server is left up to you, however.
57*9712c20fSFrederick Mayle
58*9712c20fSFrederick Mayle## Build process specifics(symbol generation, upload)
59*9712c20fSFrederick Mayle
60*9712c20fSFrederick MayleThe symbol creation step is talked about in the general overview doc, since it
61*9712c20fSFrederick Mayledoesn't vary much by platform. You'll need to make sure that the symbols are
62*9712c20fSFrederick Mayleavailable wherever minidumps are uploaded to for processing.
63*9712c20fSFrederick Mayle
64*9712c20fSFrederick Mayle## Out in the field - uploading the minidump
65*9712c20fSFrederick Mayle
66*9712c20fSFrederick MayleInside `src/client/windows/sender` is a class implementation called
67*9712c20fSFrederick Mayle`CrashReportSender`. This class can be compiled into a separate standalone CLI
68*9712c20fSFrederick Mayleor in the crash generation server and used to upload the report; it can know
69*9712c20fSFrederick Maylewhen to do so via one of the callbacks provided by the `CrashGenerationServer`
70*9712c20fSFrederick Mayleor the `ExceptionHandler` object for in-process generation.
71