Преглед изворни кода

Allow configurable minidump write location via ProcessUtils.h functions. Closes #1142.

Lasse Öörni пре 10 година
родитељ
комит
5e780d9e8b

+ 2 - 0
Source/Urho3D/AngelScript/CoreAPI.cpp

@@ -778,6 +778,8 @@ static void RegisterProcessUtils(asIScriptEngine* engine)
     engine->RegisterGlobalFunction("String GetPlatform()", asFUNCTION(GetPlatform), asCALL_CDECL);
     engine->RegisterGlobalFunction("uint GetNumPhysicalCPUs()", asFUNCTION(GetNumPhysicalCPUs), asCALL_CDECL);
     engine->RegisterGlobalFunction("uint GetNumLogicalCPUs()", asFUNCTION(GetNumLogicalCPUs), asCALL_CDECL);
+    engine->RegisterGlobalFunction("void SetMiniDumpDir(const String&in)", asFUNCTION(SetMiniDumpDir), asCALL_CDECL);
+    engine->RegisterGlobalFunction("String GetMiniDumpDir()", asFUNCTION(GetMiniDumpDir), asCALL_CDECL);
 }
 
 static void ConstructAttributeInfo(AttributeInfo* ptr)

+ 1 - 5
Source/Urho3D/Core/MiniDump.cpp

@@ -32,7 +32,6 @@
 #include <time.h>
 #include <windows.h>
 #include <dbghelp.h>
-#include <SDL/SDL.h>
 
 namespace Urho3D
 {
@@ -62,11 +61,8 @@ URHO3D_API int WriteMiniDump(const char* applicationName, void* exceptionPointer
     dateTimeStr.Replace("/", "");
     dateTimeStr.Replace(' ', '_');
     
-    char* pathName = SDL_GetPrefPath("urho3d", "crashdumps");
-    String miniDumpDir(pathName);
+    String miniDumpDir = GetMiniDumpDir();
     String miniDumpName = miniDumpDir + String(applicationName) + "_" + dateTimeStr + ".dmp";
-    if (pathName)
-        SDL_free(pathName);
     
     CreateDirectoryW(WString(miniDumpDir).CString(), 0);
     HANDLE file = CreateFileW(WString(miniDumpName).CString(), GENERIC_READ | GENERIC_WRITE, FILE_SHARE_WRITE | FILE_SHARE_READ,

+ 25 - 0
Source/Urho3D/Core/ProcessUtils.cpp

@@ -23,6 +23,7 @@
 #include "../Precompiled.h"
 
 #include "../Core/ProcessUtils.h"
+#include "../IO/FileSystem.h"
 
 #include <cstdio>
 #include <fcntl.h>
@@ -92,6 +93,7 @@ static bool consoleOpened = false;
 #endif
 static String currentLine;
 static Vector<String> arguments;
+static String miniDumpDir;
 
 #if defined(IOS)
 static void GetCPUData(host_basic_info_data_t* data)
@@ -441,4 +443,27 @@ unsigned GetNumLogicalCPUs()
 #endif
 }
 
+void SetMiniDumpDir(const String& pathName)
+{
+    miniDumpDir = AddTrailingSlash(pathName);
+}
+
+String GetMiniDumpDir()
+{
+#ifndef MINI_URHO
+    if (miniDumpDir.Empty())
+    {
+        char* pathName = SDL_GetPrefPath("urho3d", "crashdumps");
+        if (pathName)
+        {
+            String ret(pathName);
+            SDL_free(pathName);
+            return ret;
+        }
+    }
+#endif
+
+    return miniDumpDir;
+}
+
 }

+ 4 - 0
Source/Urho3D/Core/ProcessUtils.h

@@ -65,5 +65,9 @@ URHO3D_API String GetPlatform();
 URHO3D_API unsigned GetNumPhysicalCPUs();
 /// Return the number of logical CPUs (different from physical if hyperthreading is used.)
 URHO3D_API unsigned GetNumLogicalCPUs();
+/// Set minidump write location as an absolute path. If empty, uses default (UserProfile/AppData/Roaming/urho3D/crashdumps) Minidumps are only supported on MSVC compiler.
+URHO3D_API void SetMiniDumpDir(const String& pathName);
+/// Return minidump write location.
+URHO3D_API String GetMiniDumpDir();
 
 }

+ 3 - 0
Source/Urho3D/LuaScript/pkgs/Core/ProcessUtils.pkg

@@ -12,3 +12,6 @@ String GetPlatform();
 
 unsigned GetNumPhysicalCPUs();
 unsigned GetNumLogicalCPUs();
+
+void SetMiniDumpDir(const String pathName);
+String GetMiniDumpDir();