DBG: thread potentially slow file system operations in dbginit
This commit is contained in:
		
							parent
							
								
									a0ef9a0d9c
								
							
						
					
					
						commit
						2281e46588
					
				|  | @ -472,6 +472,50 @@ static bool DbgScriptDllExec(const char* dll) | ||||||
|     return true; |     return true; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | static char programDir[deflen] = ""; | ||||||
|  | 
 | ||||||
|  | static DWORD WINAPI loadDbThread(LPVOID) | ||||||
|  | { | ||||||
|  |     // Load mnemonic help database
 | ||||||
|  |     String mnemonicHelpData; | ||||||
|  |     if(FileHelper::ReadAllText(StringUtils::sprintf("%s\\..\\mnemdb.json", programDir), mnemonicHelpData)) | ||||||
|  |     { | ||||||
|  |         if(MnemonicHelp::loadFromText(mnemonicHelpData.c_str())) | ||||||
|  |             dputs(QT_TRANSLATE_NOOP("DBG", "Mnemonic help database loaded!")); | ||||||
|  |         else | ||||||
|  |             dputs(QT_TRANSLATE_NOOP("DBG", "Failed to load mnemonic help database...")); | ||||||
|  |     } | ||||||
|  |     else | ||||||
|  |         dputs(QT_TRANSLATE_NOOP("DBG", "Failed to read mnemonic help database...")); | ||||||
|  | 
 | ||||||
|  |     // Load error codes
 | ||||||
|  |     if(ErrorCodeInit(StringUtils::sprintf("%s\\..\\errordb.txt", programDir))) | ||||||
|  |         dputs(QT_TRANSLATE_NOOP("DBG", "Error codes database loaded!")); | ||||||
|  |     else | ||||||
|  |         dputs(QT_TRANSLATE_NOOP("DBG", "Failed to load error codes...")); | ||||||
|  | 
 | ||||||
|  |     // Load exception codes
 | ||||||
|  |     if(ExceptionCodeInit(StringUtils::sprintf("%s\\..\\exceptiondb.txt", programDir))) | ||||||
|  |         dputs(QT_TRANSLATE_NOOP("DBG", "Exception codes database loaded!")); | ||||||
|  |     else | ||||||
|  |         dputs(QT_TRANSLATE_NOOP("DBG", "Failed to load exception codes...")); | ||||||
|  | 
 | ||||||
|  |     // Load NTSTATUS codes
 | ||||||
|  |     if(NtStatusCodeInit(StringUtils::sprintf("%s\\..\\ntstatusdb.txt", programDir))) | ||||||
|  |         dputs(QT_TRANSLATE_NOOP("DBG", "NTSTATUS codes database loaded!")); | ||||||
|  |     else | ||||||
|  |         dputs(QT_TRANSLATE_NOOP("DBG", "Failed to load NTSTATUS codes...")); | ||||||
|  | 
 | ||||||
|  |     // Load global notes
 | ||||||
|  |     dputs(QT_TRANSLATE_NOOP("DBG", "Reading notes file...")); | ||||||
|  |     notesFile = String(programDir) + "\\notes.txt"; | ||||||
|  |     String text; | ||||||
|  |     FileHelper::ReadAllText(notesFile, text); | ||||||
|  |     GuiSetGlobalNotes(text.c_str()); | ||||||
|  | 
 | ||||||
|  |     return 0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| extern "C" DLL_EXPORT const char* _dbg_dbginit() | extern "C" DLL_EXPORT const char* _dbg_dbginit() | ||||||
| { | { | ||||||
|     if(!EngineCheckStructAlignment(UE_STRUCT_TITAN_ENGINE_CONTEXT, sizeof(TITAN_ENGINE_CONTEXT_t))) |     if(!EngineCheckStructAlignment(UE_STRUCT_TITAN_ENGINE_CONTEXT, sizeof(TITAN_ENGINE_CONTEXT_t))) | ||||||
|  | @ -496,12 +540,11 @@ extern "C" DLL_EXPORT const char* _dbg_dbginit() | ||||||
|     wchar_t wszDir[deflen] = L""; |     wchar_t wszDir[deflen] = L""; | ||||||
|     if(!GetModuleFileNameW(hInst, wszDir, deflen)) |     if(!GetModuleFileNameW(hInst, wszDir, deflen)) | ||||||
|         return "GetModuleFileNameW failed!"; |         return "GetModuleFileNameW failed!"; | ||||||
|     char dir[deflen] = ""; |     strcpy_s(programDir, StringUtils::Utf16ToUtf8(wszDir).c_str()); | ||||||
|     strcpy_s(dir, StringUtils::Utf16ToUtf8(wszDir).c_str()); |     int len = (int)strlen(programDir); | ||||||
|     int len = (int)strlen(dir); |     while(programDir[len] != '\\') | ||||||
|     while(dir[len] != '\\') |  | ||||||
|         len--; |         len--; | ||||||
|     dir[len] = 0; |     programDir[len] = 0; | ||||||
| #ifdef ENABLE_MEM_TRACE | #ifdef ENABLE_MEM_TRACE | ||||||
|     strcpy_s(alloctrace, dir); |     strcpy_s(alloctrace, dir); | ||||||
|     strcat_s(alloctrace, "\\alloctrace.txt"); |     strcat_s(alloctrace, "\\alloctrace.txt"); | ||||||
|  | @ -512,41 +555,13 @@ extern "C" DLL_EXPORT const char* _dbg_dbginit() | ||||||
| #endif //ENABLE_MEM_TRACE
 | #endif //ENABLE_MEM_TRACE
 | ||||||
|     initDataInstMap(); |     initDataInstMap(); | ||||||
| 
 | 
 | ||||||
|     // Load mnemonic help database
 |     CloseHandle(CreateThread(nullptr, 0, loadDbThread, nullptr, 0, nullptr)); | ||||||
|     String mnemonicHelpData; |  | ||||||
|     if(FileHelper::ReadAllText(StringUtils::sprintf("%s\\..\\mnemdb.json", dir), mnemonicHelpData)) |  | ||||||
|     { |  | ||||||
|         if(MnemonicHelp::loadFromText(mnemonicHelpData.c_str())) |  | ||||||
|             dputs(QT_TRANSLATE_NOOP("DBG", "Mnemonic help database loaded!")); |  | ||||||
|         else |  | ||||||
|             dputs(QT_TRANSLATE_NOOP("DBG", "Failed to load mnemonic help database...")); |  | ||||||
|     } |  | ||||||
|     else |  | ||||||
|         dputs(QT_TRANSLATE_NOOP("DBG", "Failed to read mnemonic help database...")); |  | ||||||
| 
 |  | ||||||
|     // Load error codes
 |  | ||||||
|     if(ErrorCodeInit(StringUtils::sprintf("%s\\..\\errordb.txt", dir))) |  | ||||||
|         dputs(QT_TRANSLATE_NOOP("DBG", "Error codes database loaded!")); |  | ||||||
|     else |  | ||||||
|         dputs(QT_TRANSLATE_NOOP("DBG", "Failed to load error codes...")); |  | ||||||
| 
 |  | ||||||
|     // Load exception codes
 |  | ||||||
|     if(ExceptionCodeInit(StringUtils::sprintf("%s\\..\\exceptiondb.txt", dir))) |  | ||||||
|         dputs(QT_TRANSLATE_NOOP("DBG", "Exception codes database loaded!")); |  | ||||||
|     else |  | ||||||
|         dputs(QT_TRANSLATE_NOOP("DBG", "Failed to load exception codes...")); |  | ||||||
| 
 |  | ||||||
|     // Load NTSTATUS codes
 |  | ||||||
|     if(NtStatusCodeInit(StringUtils::sprintf("%s\\..\\ntstatusdb.txt", dir))) |  | ||||||
|         dputs(QT_TRANSLATE_NOOP("DBG", "NTSTATUS codes database loaded!")); |  | ||||||
|     else |  | ||||||
|         dputs(QT_TRANSLATE_NOOP("DBG", "Failed to load NTSTATUS codes...")); |  | ||||||
| 
 | 
 | ||||||
|     // Create database directory in the local debugger folder
 |     // Create database directory in the local debugger folder
 | ||||||
|     DbSetPath(StringUtils::sprintf("%s\\db", dir).c_str(), nullptr); |     DbSetPath(StringUtils::sprintf("%s\\db", programDir).c_str(), nullptr); | ||||||
| 
 | 
 | ||||||
|     char szLocalSymbolPath[MAX_PATH] = ""; |     char szLocalSymbolPath[MAX_PATH] = ""; | ||||||
|     strcpy_s(szLocalSymbolPath, dir); |     strcpy_s(szLocalSymbolPath, programDir); | ||||||
|     strcat_s(szLocalSymbolPath, "\\symbols"); |     strcat_s(szLocalSymbolPath, "\\symbols"); | ||||||
| 
 | 
 | ||||||
|     char cachePath[MAX_SETTING_SIZE]; |     char cachePath[MAX_SETTING_SIZE]; | ||||||
|  | @ -559,7 +574,7 @@ extern "C" DLL_EXPORT const char* _dbg_dbginit() | ||||||
|     { |     { | ||||||
|         if(_strnicmp(cachePath, ".\\", 2) == 0) |         if(_strnicmp(cachePath, ".\\", 2) == 0) | ||||||
|         { |         { | ||||||
|             strncpy_s(szSymbolCachePath, dir, _TRUNCATE); |             strncpy_s(szSymbolCachePath, programDir, _TRUNCATE); | ||||||
|             strncat_s(szSymbolCachePath, cachePath + 1, _TRUNCATE); |             strncat_s(szSymbolCachePath, cachePath + 1, _TRUNCATE); | ||||||
|         } |         } | ||||||
|         else |         else | ||||||
|  | @ -578,7 +593,7 @@ extern "C" DLL_EXPORT const char* _dbg_dbginit() | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|     dprintf(QT_TRANSLATE_NOOP("DBG", "Symbol Path: %s\n"), szSymbolCachePath); |     dprintf(QT_TRANSLATE_NOOP("DBG", "Symbol Path: %s\n"), szSymbolCachePath); | ||||||
|     SetCurrentDirectoryW(StringUtils::Utf8ToUtf16(dir).c_str()); |     SetCurrentDirectoryW(StringUtils::Utf8ToUtf16(programDir).c_str()); | ||||||
|     dputs(QT_TRANSLATE_NOOP("DBG", "Allocating message stack...")); |     dputs(QT_TRANSLATE_NOOP("DBG", "Allocating message stack...")); | ||||||
|     gMsgStack = MsgAllocStack(); |     gMsgStack = MsgAllocStack(); | ||||||
|     if(!gMsgStack) |     if(!gMsgStack) | ||||||
|  | @ -603,7 +618,7 @@ extern "C" DLL_EXPORT const char* _dbg_dbginit() | ||||||
|     dputs(QT_TRANSLATE_NOOP("DBG", "Starting command loop...")); |     dputs(QT_TRANSLATE_NOOP("DBG", "Starting command loop...")); | ||||||
|     hCommandLoopThread = CreateThread(0, 0, DbgCommandLoopThread, 0, 0, 0); |     hCommandLoopThread = CreateThread(0, 0, DbgCommandLoopThread, 0, 0, 0); | ||||||
|     char plugindir[deflen] = ""; |     char plugindir[deflen] = ""; | ||||||
|     strcpy_s(plugindir, dir); |     strcpy_s(plugindir, programDir); | ||||||
|     strcat_s(plugindir, "\\plugins"); |     strcat_s(plugindir, "\\plugins"); | ||||||
|     CreateDirectoryW(StringUtils::Utf8ToUtf16(plugindir).c_str(), 0); |     CreateDirectoryW(StringUtils::Utf8ToUtf16(plugindir).c_str(), 0); | ||||||
|     dputs(QT_TRANSLATE_NOOP("DBG", "Loading plugins...")); |     dputs(QT_TRANSLATE_NOOP("DBG", "Loading plugins...")); | ||||||
|  | @ -621,11 +636,7 @@ extern "C" DLL_EXPORT const char* _dbg_dbginit() | ||||||
|     else if(argc == 5 && !_wcsicmp(argv[1], L"-a") && !_wcsicmp(argv[3], L"-e"))  //4 arguments (JIT)
 |     else if(argc == 5 && !_wcsicmp(argv[1], L"-a") && !_wcsicmp(argv[3], L"-e"))  //4 arguments (JIT)
 | ||||||
|         DbgCmdExec(StringUtils::Utf16ToUtf8(StringUtils::sprintf(L"attach .%s, .%s", argv[2], argv[4])).c_str()); //attach pid, event
 |         DbgCmdExec(StringUtils::Utf16ToUtf8(StringUtils::sprintf(L"attach .%s, .%s", argv[2], argv[4])).c_str()); //attach pid, event
 | ||||||
|     LocalFree(argv); |     LocalFree(argv); | ||||||
|     dputs(QT_TRANSLATE_NOOP("DBG", "Reading notes file...")); | 
 | ||||||
|     notesFile = String(dir) + "\\notes.txt"; |  | ||||||
|     String text; |  | ||||||
|     FileHelper::ReadAllText(notesFile, text); |  | ||||||
|     GuiSetGlobalNotes(text.c_str()); |  | ||||||
|     dputs(QT_TRANSLATE_NOOP("DBG", "Initialization successful!")); |     dputs(QT_TRANSLATE_NOOP("DBG", "Initialization successful!")); | ||||||
|     bIsStopped = false; |     bIsStopped = false; | ||||||
|     return nullptr; |     return nullptr; | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue