From c810a96300d42063c109a58d299b62fc9fbb15e7 Mon Sep 17 00:00:00 2001 From: baldurk Date: Thu, 8 Dec 2016 18:22:48 +0000 Subject: [PATCH] Keep debug log the same even when going via cap32for64 --- renderdoc/api/replay/renderdoc_replay.h | 1 + renderdoc/os/win32/win32_process.cpp | 15 ++++++--------- renderdoc/replay/entry_points.cpp | 6 ++++++ renderdoccmd/renderdoccmd.cpp | 5 +++++ 4 files changed, 18 insertions(+), 9 deletions(-) diff --git a/renderdoc/api/replay/renderdoc_replay.h b/renderdoc/api/replay/renderdoc_replay.h index ad73346b8..e2af6e962 100644 --- a/renderdoc/api/replay/renderdoc_replay.h +++ b/renderdoc/api/replay/renderdoc_replay.h @@ -647,6 +647,7 @@ extern "C" RENDERDOC_API uint32_t RENDERDOC_CC RENDERDOC_InjectIntoProcess( extern "C" RENDERDOC_API void RENDERDOC_CC RENDERDOC_TriggerExceptionHandler(void *exceptionPtrs, bool32 crashed); +extern "C" RENDERDOC_API void RENDERDOC_CC RENDERDOC_SetDebugLogFile(const char *filename); extern "C" RENDERDOC_API void RENDERDOC_CC RENDERDOC_LogText(const char *text); extern "C" RENDERDOC_API void RENDERDOC_CC RENDERDOC_LogMessage(LogMessageType type, const char *project, const char *file, diff --git a/renderdoc/os/win32/win32_process.cpp b/renderdoc/os/win32/win32_process.cpp index c21e9bd00..37a4ab166 100644 --- a/renderdoc/os/win32/win32_process.cpp +++ b/renderdoc/os/win32/win32_process.cpp @@ -172,12 +172,6 @@ extern "C" __declspec(dllexport) void __cdecl INTERNAL_SetLogFile(const char *lo RenderDoc::Inst().SetLogFile(log); } -extern "C" __declspec(dllexport) void __cdecl INTERNAL_SetDebugLogFile(const char *log) -{ - if(log) - RDCLOGFILE(log); -} - static Process::EnvironmentModification tempEnvMod; extern "C" __declspec(dllexport) void __cdecl INTERNAL_EnvModName(const char *name) @@ -595,9 +589,12 @@ uint32_t Process::InjectIntoProcess(uint32_t pid, EnvironmentModification *env, wchar_t *paramsAlloc = new wchar_t[2048]; + std::string debugLogfile = RDCGETLOGFILE(); + wstring wdebugLogfile = StringFormat::UTF82Wide(debugLogfile); + _snwprintf_s(paramsAlloc, 2047, 2047, - L"\"%ls\" cap32for64 --pid=%d --log=\"%ls\" --capopts=\"%hs\"", renderdocPath, pid, - wlogfile.c_str(), optstr.c_str()); + L"\"%ls\" cap32for64 --pid=%d --log=\"%ls\" --debuglog=\"%ls\" --capopts=\"%hs\"", + renderdocPath, pid, wlogfile.c_str(), wdebugLogfile.c_str(), optstr.c_str()); paramsAlloc[2047] = 0; @@ -711,7 +708,7 @@ uint32_t Process::InjectIntoProcess(uint32_t pid, EnvironmentModification *env, std::string debugLogfile = RDCGETLOGFILE(); - InjectFunctionCall(hProcess, loc, "INTERNAL_SetDebugLogFile", (void *)debugLogfile.c_str(), + InjectFunctionCall(hProcess, loc, "RENDERDOC_SetDebugLogFile", (void *)debugLogfile.c_str(), debugLogfile.size() + 1); if(opts != NULL) diff --git a/renderdoc/replay/entry_points.cpp b/renderdoc/replay/entry_points.cpp index ae55164dc..a0ad1f651 100644 --- a/renderdoc/replay/entry_points.cpp +++ b/renderdoc/replay/entry_points.cpp @@ -285,6 +285,12 @@ extern "C" RENDERDOC_API void RENDERDOC_CC RENDERDOC_FreeEnvironmentModification delete[] mods; } +extern "C" RENDERDOC_API void RENDERDOC_CC RENDERDOC_SetDebugLogFile(const char *log) +{ + if(log) + RDCLOGFILE(log); +} + extern "C" RENDERDOC_API void RENDERDOC_CC RENDERDOC_LogText(const char *text) { rdclog_int(RDCLog_Comment, "EXT", "external", 0, "%s", text); diff --git a/renderdoccmd/renderdoccmd.cpp b/renderdoccmd/renderdoccmd.cpp index ce5bc5b51..b2a23020a 100644 --- a/renderdoccmd/renderdoccmd.cpp +++ b/renderdoccmd/renderdoccmd.cpp @@ -548,6 +548,7 @@ struct Cap32For64Command : public Command { parser.add("pid", 0, ""); parser.add("log", 0, ""); + parser.add("debuglog", 0, ""); parser.add("capopts", 0, ""); parser.stop_at_rest(true); } @@ -634,6 +635,10 @@ struct Cap32For64Command : public Command type, sep); } + string debuglog = parser.get("debuglog"); + + RENDERDOC_SetDebugLogFile(debuglog.c_str()); + int ret = RENDERDOC_InjectIntoProcess(parser.get("pid"), env, parser.get("log").c_str(), &cmdopts, false);