1
0
Fork 0

DBG: some small cosmetic changes to the debugger/database

This commit is contained in:
mrexodia 2015-12-30 04:52:10 +01:00
parent f6e747ec25
commit 601117d303
5 changed files with 33 additions and 36 deletions

View File

@ -14,6 +14,7 @@
#include "function.h"
#include "loop.h"
#include "commandline.h"
#include "database.h"
/**
\brief Directory where program databases are stored (usually in \db). UTF-8 encoding.
@ -25,26 +26,19 @@ char dbbasepath[deflen];
*/
char dbpath[deflen];
enum LOAD_SAVE_DB_TYPE
{
COMMAND_LINE_ONLY,
ALL_BUT_COMMAND_LINE,
ALL
};
void DBSave(LOAD_SAVE_DB_TYPE saveType)
void DbSave(DbLoadSaveType saveType)
{
dprintf("Saving database...");
DWORD ticks = GetTickCount();
JSON root = json_object();
// Save only command line
if(saveType == COMMAND_LINE_ONLY || saveType == ALL)
if(saveType == DbLoadSaveType::CommandLine || saveType == DbLoadSaveType::All)
{
CmdLineCacheSave(root);
}
if(saveType == ALL_BUT_COMMAND_LINE || saveType == ALL)
if(saveType == DbLoadSaveType::DebugData || saveType == DbLoadSaveType::All)
{
CommentCacheSave(root);
LabelCacheSave(root);
@ -95,13 +89,16 @@ void DBSave(LOAD_SAVE_DB_TYPE saveType)
json_decref(root); //free root
}
void DBLoad(LOAD_SAVE_DB_TYPE loadType)
void DbLoad(DbLoadSaveType loadType)
{
// If the file doesn't exist, there is no DB to load
if(!FileExists(dbpath))
return;
dprintf("Loading database...");
if(loadType == DbLoadSaveType::CommandLine)
dputs("Loading commandline...");
else
dprintf("Loading database...");
DWORD ticks = GetTickCount();
// Multi-byte (UTF8) file path converted to UTF16
@ -159,12 +156,12 @@ void DBLoad(LOAD_SAVE_DB_TYPE loadType)
}
// Load only command line
if(loadType == COMMAND_LINE_ONLY || loadType == ALL)
if(loadType == DbLoadSaveType::CommandLine || loadType == DbLoadSaveType::All)
{
CmdLineCacheLoad(root);
}
if(loadType == ALL_BUT_COMMAND_LINE || loadType == ALL)
if(loadType == DbLoadSaveType::DebugData || loadType == DbLoadSaveType::All)
{
// Finally load all structures
CommentCacheLoad(root);
@ -181,12 +178,13 @@ void DBLoad(LOAD_SAVE_DB_TYPE loadType)
// Free root
json_decref(root);
dprintf("%ums\n", GetTickCount() - ticks);
if(loadType != DbLoadSaveType::CommandLine)
dprintf("%ums\n", GetTickCount() - ticks);
}
void DBClose()
void DbClose()
{
DBSave(ALL);
DbSave(DbLoadSaveType::All);
CommentClear();
LabelClear();
BookmarkClear();
@ -196,7 +194,7 @@ void DBClose()
PatchClear();
}
void DBSetPath(const char* Directory, const char* ModulePath)
void DbSetPath(const char* Directory, const char* ModulePath)
{
// Initialize directory if it was only supplied
if(Directory)

View File

@ -2,14 +2,14 @@
#include "_global.h"
enum LOAD_SAVE_DB_TYPE
enum class DbLoadSaveType
{
COMMAND_LINE_ONLY,
ALL_BUT_COMMAND_LINE,
ALL
CommandLine,
DebugData,
All
};
void DBSave(LOAD_SAVE_DB_TYPE saveType);
void DBLoad(LOAD_SAVE_DB_TYPE loadType);
void DBClose();
void DBSetPath(const char* Directory, const char* ModulePath);
void DbSave(DbLoadSaveType saveType);
void DbLoad(DbLoadSaveType loadType);
void DbClose();
void DbSetPath(const char* Directory, const char* ModulePath);

View File

@ -663,8 +663,7 @@ static void cbCreateProcess(CREATE_PROCESS_DEBUG_INFO* CreateProcessInfo)
GuiDumpAt(MemFindBaseAddr(GetContextDataEx(CreateProcessInfo->hThread, UE_CIP), 0) + PAGE_SIZE); //dump somewhere
// Init program database
DBSetPath(nullptr, szFileName);
DBLoad(ALL_BUT_COMMAND_LINE);
DbLoad(DbLoadSaveType::DebugData);
SafeSymSetOptions(SYMOPT_DEBUG | SYMOPT_LOAD_LINES | SYMOPT_ALLOW_ABSOLUTE_SYMBOLS | SYMOPT_FAVOR_COMPRESSED | SYMOPT_IGNORE_NT_SYMPATH);
GuiSymbolLogClear();
@ -1155,8 +1154,8 @@ DWORD WINAPI threadDebugLoop(void* lpParameter)
strcpy_s(szFileName, init->exe);
// Load command line if it exists in DB
DBSetPath(nullptr, szFileName);
DBLoad(COMMAND_LINE_ONLY);
DbSetPath(nullptr, szFileName);
DbLoad(DbLoadSaveType::CommandLine);
if(!isCmdLineEmpty())
{
@ -1240,7 +1239,7 @@ DWORD WINAPI threadDebugLoop(void* lpParameter)
//message the user/do final stuff
RemoveAllBreakPoints(UE_OPTION_REMOVEALL); //remove all breakpoints
//cleanup
DBClose();
DbClose();
ModClear();
ThreadClear();
SymClearMemoryCache();
@ -1508,7 +1507,7 @@ DWORD WINAPI threadAttachLoop(void* lpParameter)
//message the user/do final stuff
RemoveAllBreakPoints(UE_OPTION_REMOVEALL); //remove all breakpoints
//cleanup
DBClose();
DbClose();
ModClear();
ThreadClear();
SymClearMemoryCache();

View File

@ -416,14 +416,14 @@ CMDRESULT cbInstrBookmarkDel(int argc, char* argv[])
CMDRESULT cbInstrLoaddb(int argc, char* argv[])
{
DBLoad(ALL);
DbLoad(DbLoadSaveType::All);
GuiUpdateAllViews();
return STATUS_CONTINUE;
}
CMDRESULT cbInstrSavedb(int argc, char* argv[])
{
DBSave(ALL);
DbSave(DbLoadSaveType::All);
return STATUS_CONTINUE;
}

View File

@ -284,7 +284,7 @@ extern "C" DLL_EXPORT const char* _dbg_dbginit()
setalloctrace(alloctrace);
// Create database directory in the local debugger folder
DBSetPath(StringUtils::sprintf("%s\\db", dir).c_str(), nullptr);
DbSetPath(StringUtils::sprintf("%s\\db", dir).c_str(), nullptr);
char szLocalSymbolPath[MAX_PATH] = "";
strcpy_s(szLocalSymbolPath, dir);
@ -318,7 +318,7 @@ extern "C" DLL_EXPORT const char* _dbg_dbginit()
}
}
}
dputs(szSymbolCachePath);
dprintf("Symbol Path: %s\n", szSymbolCachePath);
SetCurrentDirectoryW(StringUtils::Utf8ToUtf16(dir).c_str());
dputs("Allocating message stack...");
gMsgStack = MsgAllocStack();