mirror of
https://github.com/yuzu-emu/breakpad.git
synced 2025-01-10 22:55:33 +00:00
Pass the exception record (EXCEPTION_POINTERS*) to callback functions from
ExceptionHandler on Windows. Patch by John Abd-El-Malek. r=me Interface change: post-dump and pre-dump (filter) callbacks now must accept an additional EXCEPTION_POINTERS* argument. git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@103 4c0a9323-5329-0410-9bdc-e9ce6186880e
This commit is contained in:
parent
fd98b2af37
commit
f614cb9845
|
@ -287,7 +287,7 @@ bool ExceptionHandler::WriteMinidumpWithException(DWORD requesting_thread_id,
|
|||
// HandleException to call any previous handler or return
|
||||
// EXCEPTION_CONTINUE_SEARCH on the exception thread, allowing it to appear
|
||||
// as though this handler were not present at all.
|
||||
if (filter_&& !filter_(callback_context_)) {
|
||||
if (filter_&& !filter_(callback_context_, exinfo)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -342,7 +342,7 @@ bool ExceptionHandler::WriteMinidumpWithException(DWORD requesting_thread_id,
|
|||
|
||||
if (callback_) {
|
||||
success = callback_(dump_path_c_, next_minidump_id_c_, callback_context_,
|
||||
success);
|
||||
exinfo, success);
|
||||
}
|
||||
|
||||
return success;
|
||||
|
|
|
@ -79,19 +79,21 @@ class ExceptionHandler {
|
|||
// A callback function to run before Airbag performs any substantial
|
||||
// processing of an exception. A FilterCallback is called before writing
|
||||
// a minidump. context is the parameter supplied by the user as
|
||||
// callback_context when the handler was created.
|
||||
// callback_context when the handler was created. exinfo points to the
|
||||
// exception record.
|
||||
//
|
||||
// If a FilterCallback returns true, Airbag will continue processing,
|
||||
// attempting to write a minidump. If a FilterCallback returns false, Airbag
|
||||
// will immediately report the exception as unhandled without writing a
|
||||
// minidump, allowing another handler the opportunity to handle it.
|
||||
typedef bool (*FilterCallback)(void *context);
|
||||
typedef bool (*FilterCallback)(void *context, EXCEPTION_POINTERS *exinfo);
|
||||
|
||||
// A callback function to run after the minidump has been written.
|
||||
// minidump_id is a unique id for the dump, so the minidump
|
||||
// file is <dump_path>\<minidump_id>.dmp. context is the parameter supplied
|
||||
// by the user as callback_context when the handler was created. succeeded
|
||||
// indicates whether a minidump file was successfully written.
|
||||
// by the user as callback_context when the handler was created. exinfo
|
||||
// points to the exception record, or NULL if no exception occurred.
|
||||
// succeeded indicates whether a minidump file was successfully written.
|
||||
//
|
||||
// If an exception occurred and the callback returns true, Airbag will treat
|
||||
// the exception as fully-handled, suppressing any other handlers from being
|
||||
|
@ -106,6 +108,7 @@ class ExceptionHandler {
|
|||
typedef bool (*MinidumpCallback)(const wchar_t *dump_path,
|
||||
const wchar_t *minidump_id,
|
||||
void *context,
|
||||
EXCEPTION_POINTERS *exinfo,
|
||||
bool succeeded);
|
||||
|
||||
// Creates a new ExceptionHandler instance to handle writing minidumps.
|
||||
|
|
3
src/processor/testdata/test_app.cc
vendored
3
src/processor/testdata/test_app.cc
vendored
|
@ -40,7 +40,8 @@
|
|||
namespace {
|
||||
|
||||
static bool callback(const wchar_t *dump_path, const wchar_t *id,
|
||||
void *context, bool succeeded) {
|
||||
void *context, EXCEPTION_POINTERS *exinfo,
|
||||
bool succeeded) {
|
||||
if (succeeded) {
|
||||
printf("dump guid is %ws\n", id);
|
||||
} else {
|
||||
|
|
Loading…
Reference in a new issue