Git commit 040035e3e3241f4737636c98185b4d37d482068b by Thomas Friedrichsmeier. Committed on 20/05/2017 at 20:10. Pushed by tfry into branch 'frameworks'.
Add option to send debug output to terminal M +7 -2 doc/rkward/man-rkward.1.docbook M +24 -7 rkward/main.cpp https://commits.kde.org/rkward/040035e3e3241f4737636c98185b4d37d482068b diff --git a/doc/rkward/man-rkward.1.docbook b/doc/rkward/man-rkward.1.docbook index 03471efc..d978b9c5 100644 --- a/doc/rkward/man-rkward.1.docbook +++ b/doc/rkward/man-rkward.1.docbook @@ -16,7 +16,7 @@ <address><email>[email protected]</email></address> </affiliation> </author> -<date>2015-12-07</date> +<date>2017-05-20</date> <productname>K Desktop Environment</productname> </refentryinfo> @@ -36,6 +36,7 @@ <group choice="opt"><option>--evaluate</option> <replaceable> Rcode</replaceable></group> <group choice="opt"><option>--debug-level</option> <replaceable> level</replaceable></group> <group choice="opt"><option>--debug-flags</option> <replaceable> flags</replaceable></group> +<group choice="opt"><option>--debug-output</option> <replaceable> where</replaceable></group> <group choice="opt"><option>--backend-debugger</option> <replaceable> debugger_command</replaceable></group> <group choice="opt"><option>--r-executable</option> <replaceable> path_to_executable</replaceable></group> <group choice="opt"><option>--reuse</option></group> @@ -62,7 +63,11 @@ </varlistentry> <varlistentry> <term><option>--debug-level</option> <replaceable>level</replaceable></term> -<listitem><para>Verbosity of debug output. 0-5, where 0 is no output, 5 is all output including function trace information. Default it 2.</para></listitem> +<listitem><para>Verbosity of debug output. 0-5, where 0 is no output, 5 is all output including function trace information. Default is 2.</para></listitem> +</varlistentry> +<varlistentry> +<term><option>--debug-output</option> <replaceable>where</replaceable></term> +<listitem><para>Where to send debug output. Default is to store it in a file in the temporary directory. Specifying "terminal" will write debug output to stdout, instead (useful for debugging, sometimes). Not that debug output from the backend process is always stored in a file.</para></listitem> </varlistentry> <varlistentry> <term><option>--debug-flags</option> <replaceable>flags</replaceable></term> diff --git a/rkward/main.cpp b/rkward/main.cpp index 1a6a0d02..c215bb83 100644 --- a/rkward/main.cpp +++ b/rkward/main.cpp @@ -2,7 +2,7 @@ main.cpp - description ------------------- begin : Tue Oct 29 20:06:08 CET 2002 - copyright : (C) 2002-2014 by Thomas Friedrichsmeier + copyright : (C) 2002-2017 by Thomas Friedrichsmeier email : [email protected] ***************************************************************************/ @@ -113,18 +113,33 @@ QString findExeAtPath (const QString appname, const QString &path) { int RK_Debug_Level = 0; int RK_Debug_Flags = DEBUG_ALL; +bool RK_Debug_Terminal = false; int RK_Debug_CommandStep = 0; QMutex RK_Debug_Mutex; -void RKDebugMessageOutput (QtMsgType type, const QMessageLogContext &, const QString &msg) { +void RKDebugMessageOutput (QtMsgType type, const QMessageLogContext &ctx, const QString &msg) { RK_Debug_Mutex.lock (); if (type == QtFatalMsg) { fprintf (stderr, "%s\n", qPrintable (msg)); } - // KF5 TODO: Make use of message log context - RKSettingsModuleDebug::debug_file->write (qPrintable (msg)); - RKSettingsModuleDebug::debug_file->write ("\n"); - RKSettingsModuleDebug::debug_file->flush (); + + if (RK_Debug_Terminal) { +#ifdef QT_MESSAGELOGCONTEXT + printf ("%s, %s: %s", ctx.file, ctx.function, qPrintable (msg)); +#else + Q_UNUSED (ctx); + printf ("%s", qPrintable (msg)); +#endif + printf ("\n"); + } else { +#ifdef QT_MESSAGELOGCONTEXT + RKSettingsModuleDebug::debug_file->write (ctx.file); + RKSettingsModuleDebug::debug_file->write (ctx.function); +#endif + RKSettingsModuleDebug::debug_file->write (qPrintable (msg)); + RKSettingsModuleDebug::debug_file->write ("\n"); + RKSettingsModuleDebug::debug_file->flush (); + } RK_Debug_Mutex.unlock (); } @@ -192,6 +207,7 @@ int main (int argc, char *argv[]) { parser.addOption (QCommandLineOption ("evaluate", i18n ("After starting (and after loading the specified workspace, if applicable), evaluate the given R code."), "Rcode", QString ())); parser.addOption (QCommandLineOption ("debug-level", i18n ("Verbosity of debug messages (0-5)"), "level", "2")); parser.addOption (QCommandLineOption ("debug-flags", i18n ("Mask for components to debug (see debug.h)"), "flags", QString::number (DEBUG_ALL))); + parser.addOption (QCommandLineOption ("debug-output", i18n ("Where to send debug message (file|terminal)"), "where", "file")); parser.addOption (QCommandLineOption ("backend-debugger", i18n ("Debugger for the backend. (Enclose any debugger arguments in single quotes ('') together with the command. Make sure to re-direct stdout!)"), "command", QString ())); parser.addOption (QCommandLineOption ("r-executable", i18n ("Use specified R installation, instead of the one configured at compile time (note: rkward R library must be installed to that installation of R)"), "command", QString ())); parser.addOption (QCommandLineOption ("reuse", i18n ("Reuse a running RKWard instance (if available). If a running instance is reused, only the file arguments will be interpreted, all other options will be ignored."))); @@ -205,8 +221,9 @@ int main (int argc, char *argv[]) { // Set up debugging RK_Debug_Level = DL_FATAL - QString (parser.value ("debug-level")).toInt (); RK_Debug_Flags = QString (parser.value ("debug-flags")).toInt (); + RK_Debug_Terminal = QString (parser.value ("debug-output")) == "terminal"; RKSettingsModuleDebug::debug_file = new QTemporaryFile (QDir::tempPath () + "/rkward.frontend"); - RKSettingsModuleDebug::debug_file->setAutoRemove (false); + RKSettingsModuleDebug::debug_file->setAutoRemove (RK_Debug_Terminal); if (RKSettingsModuleDebug::debug_file->open ()) { RK_DEBUG (APP, DL_INFO, "Full debug output is at %s", qPrintable (RKSettingsModuleDebug::debug_file->fileName ())); qInstallMessageHandler (RKDebugMessageOutput);
