static inline void handle_exception(struct exception_handler_data *data, PEXCEPTION_POINTERS exception) { if (!get_dbghelp_imports(data)) return; data->exception = exception; data->process = GetCurrentProcess(); data->main_trace.context = *exception->ContextRecord; GetSystemTime(&data->time_info); init_sym_info(data); init_version_info(data); init_cpu_info(data); init_instruction_data(&data->main_trace); init_module_info(data); write_header(data); write_thread_traces(data); write_module_list(data); }
/* GNUCASH_RESAVE_VERSION indicates the earliest database version * compatible with this version of Gnucash; the stored value is the * earliest version of Gnucash conpatible with the database. If the * GNUCASH_RESAVE_VERSION for this Gnucash is newer than the Gnucash * version which created the database, a resave is offered. If the * version of this Gnucash is older than the saved resave version, * then the database will be loaded read-only. A resave will update * both values to match this version of Gnucash. */ template <DbType Type> void GncDbiBackend<Type>::load (QofBook* book, QofBackendLoadType loadType) { g_return_if_fail (book != nullptr); ENTER ("dbi_be=%p, book=%p", this, book); if (loadType == LOAD_TYPE_INITIAL_LOAD) { // Set up table version information init_version_info (); assert (m_book == nullptr); create_tables(); } GncSqlBackend::load(book, loadType); if (GNUCASH_RESAVE_VERSION > get_table_version("Gnucash")) { /* The database was loaded with an older database schema or * data semantics. In order to ensure consistency, the whole * thing needs to be saved anew. */ set_error(ERR_SQL_DB_TOO_OLD); } else if (GNUCASH_RESAVE_VERSION < get_table_version("Gnucash-Resave")) { /* Worse, the database was created with a newer version. We * can't safely write to this database, so the user will have * to do a "save as" to make one that we can write to. */ set_error(ERR_SQL_DB_TOO_NEW); } LEAVE (""); }