diff options
-rw-r--r-- | base/commandLine.cpp | 4 | ||||
-rw-r--r-- | base/main.cpp | 4 | ||||
-rw-r--r-- | common/debug.cpp | 11 | ||||
-rw-r--r-- | common/debug.h | 9 |
4 files changed, 26 insertions, 2 deletions
diff --git a/base/commandLine.cpp b/base/commandLine.cpp index 2c24c018ee..c2b4ea765f 100644 --- a/base/commandLine.cpp +++ b/base/commandLine.cpp @@ -97,6 +97,7 @@ static const char HELP_STRING[] = " -d, --debuglevel=NUM Set debug verbosity level\n" " --debugflags=FLAGS Enable engine specific debug flags\n" " (separated by commas)\n" + " --debug-channels-only Show only the specified debug channels\n" " -u, --dump-scripts Enable script dumping if a directory called 'dumps'\n" " exists in the current directory\n" "\n" @@ -426,6 +427,9 @@ Common::String parseCommandLine(Common::StringMap &settings, int argc, const cha DO_LONG_OPTION("debugflags") END_OPTION + DO_LONG_OPTION_BOOL("debug-channels-only") + END_OPTION + DO_OPTION('e', "music-driver") END_OPTION diff --git a/base/main.cpp b/base/main.cpp index 349f719ed5..1667106543 100644 --- a/base/main.cpp +++ b/base/main.cpp @@ -391,6 +391,10 @@ extern "C" int scummvm_main(int argc, const char * const argv[]) { } else if (ConfMan.hasKey("debugflags")) specialDebug = ConfMan.get("debugflags"); + if (settings.contains("debug-channels-only")) + gDebugChannelsOnly = true; + + PluginManager::instance().init(); PluginManager::instance().loadAllPlugins(); // load plugins for cached plugin manager diff --git a/common/debug.cpp b/common/debug.cpp index 182b28afdf..ce34a00445 100644 --- a/common/debug.cpp +++ b/common/debug.cpp @@ -30,6 +30,7 @@ // TODO: Move gDebugLevel into namespace Common. int gDebugLevel = -1; +bool gDebugChannelsOnly = false; namespace Common { @@ -137,6 +138,9 @@ static void debugHelper(const char *s, va_list va, bool caret = true) { void debug(const char *s, ...) { va_list va; + if (gDebugChannelsOnly) + return; + va_start(va, s); debugHelper(s, va); va_end(va); @@ -145,7 +149,7 @@ void debug(const char *s, ...) { void debug(int level, const char *s, ...) { va_list va; - if (level > gDebugLevel) + if (level > gDebugLevel || gDebugChannelsOnly) return; va_start(va, s); @@ -157,6 +161,9 @@ void debug(int level, const char *s, ...) { void debugN(const char *s, ...) { va_list va; + if (gDebugChannelsOnly) + return; + va_start(va, s); debugHelper(s, va, false); va_end(va); @@ -165,7 +172,7 @@ void debugN(const char *s, ...) { void debugN(int level, const char *s, ...) { va_list va; - if (level > gDebugLevel) + if (level > gDebugLevel || gDebugChannelsOnly) return; va_start(va, s); diff --git a/common/debug.h b/common/debug.h index b6e0679a12..00bad81fa6 100644 --- a/common/debug.h +++ b/common/debug.h @@ -118,6 +118,15 @@ void debugCN(uint32 debugChannels, const char *s, ...) GCC_PRINTF(2, 3); */ extern int gDebugLevel; +/** + * Specify if we want to show only the debug channels and suppress + * the non-channeled output. + * + * This option is useful when you want to have higher levels of channels + * visible without the noise from other subsystems or OSystem. + */ +extern bool gDebugChannelsOnly; + //Global constant for EventRecorder debug channel enum GlobalDebugLevels { kDebugLevelEventRec = 1 << 30 |