mirror of
https://github.com/gnif/LookingGlass.git
synced 2024-12-22 13:33:40 +00:00
[common] debug: add color support to debug messages
People often miss the warnings about invalid arguments in their command line, this last minute patch attempts to address this by making warnings, errors, fixme's and fatal errors stand out if stdout is a TTY.
This commit is contained in:
parent
ada6ada576
commit
1effd5fddc
@ -1052,6 +1052,9 @@ static void lg_shutdown(void)
|
||||
|
||||
int main(int argc, char * argv[])
|
||||
{
|
||||
// initialize for DEBUG_* macros
|
||||
debug_init();
|
||||
|
||||
if (getuid() == 0)
|
||||
{
|
||||
DEBUG_ERROR("Do not run looking glass as root!");
|
||||
|
@ -30,6 +30,20 @@
|
||||
#include <inttypes.h>
|
||||
#include "time.h"
|
||||
|
||||
enum DebugLevel
|
||||
{
|
||||
DEBUG_LEVEL_INFO,
|
||||
DEBUG_LEVEL_WARN,
|
||||
DEBUG_LEVEL_ERROR,
|
||||
DEBUG_LEVEL_FIXME,
|
||||
DEBUG_LEVEL_FATAL
|
||||
};
|
||||
|
||||
extern const char ** debug_lookup;
|
||||
|
||||
void debug_init(void);
|
||||
void debug_print(const enum DebugLevel level, const char * fmt, ...);
|
||||
|
||||
#ifdef ENABLE_BACKTRACE
|
||||
void printBacktrace(void);
|
||||
#define DEBUG_PRINT_BACKTRACE() printBacktrace()
|
||||
@ -65,19 +79,20 @@ void printBacktrace(void);
|
||||
sizeof(s) > 20 && (s)[sizeof(s)-21] == DIRECTORY_SEPARATOR ? (s) + sizeof(s) - 20 : \
|
||||
sizeof(s) > 21 && (s)[sizeof(s)-22] == DIRECTORY_SEPARATOR ? (s) + sizeof(s) - 21 : (s))
|
||||
|
||||
#define DEBUG_PRINT(type, fmt, ...) do { \
|
||||
fprintf(stderr, "%12" PRId64 " " type " %20s:%-4u | %-30s | " fmt "\n", \
|
||||
microtime(), STRIPPATH(__FILE__), __LINE__, __FUNCTION__, ##__VA_ARGS__);\
|
||||
#define DEBUG_PRINT(level, fmt, ...) do { \
|
||||
fprintf(stdout, "%s%12" PRId64 "%20s:%-4u | %-30s | " fmt "\n", \
|
||||
debug_lookup[level], microtime(), STRIPPATH(__FILE__), \
|
||||
__LINE__, __FUNCTION__, ##__VA_ARGS__); \
|
||||
} while (0)
|
||||
|
||||
#define DEBUG_BREAK() DEBUG_PRINT("[ ]", "================================================================================")
|
||||
#define DEBUG_INFO(fmt, ...) DEBUG_PRINT("[I]", fmt, ##__VA_ARGS__)
|
||||
#define DEBUG_WARN(fmt, ...) DEBUG_PRINT("[W]", fmt, ##__VA_ARGS__)
|
||||
#define DEBUG_ERROR(fmt, ...) DEBUG_PRINT("[E]", fmt, ##__VA_ARGS__)
|
||||
#define DEBUG_FIXME(fmt, ...) DEBUG_PRINT("[F]", fmt, ##__VA_ARGS__)
|
||||
#define DEBUG_BREAK() DEBUG_PRINT(DEBUG_LEVEL_INFO, "================================================================================")
|
||||
#define DEBUG_INFO(fmt, ...) DEBUG_PRINT(DEBUG_LEVEL_INFO, fmt, ##__VA_ARGS__)
|
||||
#define DEBUG_WARN(fmt, ...) DEBUG_PRINT(DEBUG_LEVEL_WARN, fmt, ##__VA_ARGS__)
|
||||
#define DEBUG_ERROR(fmt, ...) DEBUG_PRINT(DEBUG_LEVEL_ERROR, fmt, ##__VA_ARGS__)
|
||||
#define DEBUG_FIXME(fmt, ...) DEBUG_PRINT(DEBUG_LEVEL_FIXME, fmt, ##__VA_ARGS__)
|
||||
#define DEBUG_FATAL(fmt, ...) do { \
|
||||
DEBUG_BREAK(); \
|
||||
DEBUG_PRINT("[!]", fmt, ##__VA_ARGS__); \
|
||||
DEBUG_PRINT(DEBUG_LEVEL_FATAL, fmt, ##__VA_ARGS__); \
|
||||
DEBUG_PRINT_BACKTRACE(); \
|
||||
abort(); \
|
||||
} while(0)
|
||||
|
@ -7,6 +7,7 @@ include_directories(
|
||||
)
|
||||
|
||||
add_library(lg_common_platform_code STATIC
|
||||
debug.c
|
||||
crash.c
|
||||
sysinfo.c
|
||||
thread.c
|
||||
|
54
common/src/platform/linux/debug.c
Normal file
54
common/src/platform/linux/debug.c
Normal file
@ -0,0 +1,54 @@
|
||||
/**
|
||||
* Looking Glass
|
||||
* Copyright (C) 2017-2021 The Looking Glass Authors
|
||||
* https://looking-glass.io
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by the Free
|
||||
* Software Foundation; either version 2 of the License, or (at your option)
|
||||
* any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
* more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; if not, write to the Free Software Foundation, Inc., 59
|
||||
* Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#include "common/debug.h"
|
||||
|
||||
#include <unistd.h>
|
||||
|
||||
#define COLOR_RESET "\033[0m"
|
||||
#define COLOR_YELLOW "\033[0;33m"
|
||||
#define COLOR_RED "\033[0;31m"
|
||||
#define COLOR_CYAN "\033[0;36m"
|
||||
#define COLOR_WHITE "\033[0;37m"
|
||||
|
||||
const char ** debug_lookup = NULL;
|
||||
|
||||
void debug_init(void)
|
||||
{
|
||||
static const char * colorLookup[] =
|
||||
{
|
||||
COLOR_RESET "[I] ", // DEBUG_LEVEL_INFO
|
||||
COLOR_YELLOW "[W] ", // DEBUG_LEVEL_WARN
|
||||
COLOR_RED "[E] ", // DEBUG_LEVEL_ERROR
|
||||
COLOR_CYAN "[F] ", // DEBUG_LEVEL_FIXME
|
||||
COLOR_WHITE "[!] " // DEBUG_LEVEL_FATAL
|
||||
};
|
||||
|
||||
static const char * plainLookup[] =
|
||||
{
|
||||
"[I] ", // DEBUG_LEVEL_INFO
|
||||
"[W] ", // DEBUG_LEVEL_WARN
|
||||
"[E] ", // DEBUG_LEVEL_ERROR
|
||||
"[F] ", // DEBUG_LEVEL_FIXME
|
||||
"[!] " // DEBUG_LEVEL_FATAL
|
||||
};
|
||||
|
||||
debug_lookup = (isatty(0) == 1) ? colorLookup : plainLookup;
|
||||
}
|
@ -6,6 +6,7 @@ include_directories(
|
||||
)
|
||||
|
||||
add_library(lg_common_platform_code STATIC
|
||||
debug.c
|
||||
crash.c
|
||||
dpi.c
|
||||
sysinfo.c
|
||||
|
37
common/src/platform/windows/debug.c
Normal file
37
common/src/platform/windows/debug.c
Normal file
@ -0,0 +1,37 @@
|
||||
/**
|
||||
* Looking Glass
|
||||
* Copyright (C) 2017-2021 The Looking Glass Authors
|
||||
* https://looking-glass.io
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by the Free
|
||||
* Software Foundation; either version 2 of the License, or (at your option)
|
||||
* any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
* more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; if not, write to the Free Software Foundation, Inc., 59
|
||||
* Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#include "common/debug.h"
|
||||
|
||||
const char ** debug_lookup = NULL;
|
||||
|
||||
void debug_init(void)
|
||||
{
|
||||
static const char * plainLookup[] =
|
||||
{
|
||||
"[I] ", // DEBUG_LEVEL_INFO
|
||||
"[W] ", // DEBUG_LEVEL_WARN
|
||||
"[E] ", // DEBUG_LEVEL_ERROR
|
||||
"[F] ", // DEBUG_LEVEL_FIXME
|
||||
"[!] " // DEBUG_LEVEL_FATAL
|
||||
};
|
||||
|
||||
debug_lookup = plainLookup;
|
||||
}
|
@ -41,6 +41,9 @@ struct app app = { 0 };
|
||||
|
||||
int main(int argc, char * argv[])
|
||||
{
|
||||
// initialize for DEBUG_* macros
|
||||
debug_init();
|
||||
|
||||
app.executable = argv[0];
|
||||
|
||||
struct passwd * pw = getpwuid(getuid());
|
||||
|
@ -314,6 +314,9 @@ fail:
|
||||
|
||||
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
|
||||
{
|
||||
// initialize for DEBUG_* macros
|
||||
debug_init();
|
||||
|
||||
// convert the command line to the standard argc and argv
|
||||
LPWSTR * wargv = CommandLineToArgvW(GetCommandLineW(), &app.argc);
|
||||
app.argv = malloc(sizeof(char *) * app.argc);
|
||||
|
Loading…
Reference in New Issue
Block a user