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