diff --git a/src/bin/e_start_main.c b/src/bin/e_start_main.c index 869480fa6..63f0bde12 100644 --- a/src/bin/e_start_main.c +++ b/src/bin/e_start_main.c @@ -148,12 +148,12 @@ next: /* maximum number of arguments added above */ -#define VALGRIND_MAX_ARGS 9 +#define VALGRIND_MAX_ARGS 10 /* bitmask with all supported bits set */ #define VALGRIND_MODE_ALL 15 static int -valgrind_append(char **dst, int valgrind_mode, int valgrind_tool, char *valgrind_path, const char *valgrind_log) +valgrind_append(char **dst, int valgrind_gdbserver, int valgrind_mode, int valgrind_tool, char *valgrind_path, const char *valgrind_log) { int i = 0; @@ -167,6 +167,7 @@ valgrind_append(char **dst, int valgrind_mode, int valgrind_tool, char *valgrind } return i; } + if (valgrind_gdbserver) dst[i++] = "--db-attach=yes"; if (!valgrind_mode) return 0; dst[i++] = valgrind_path; dst[i++] = "--track-origins=yes"; @@ -200,6 +201,7 @@ main(int argc, char **argv) { int i, do_precache = 0, valgrind_mode = 0; int valgrind_tool = 0; + int valgrind_gdbserver = 0; char buf[16384], **args, *p; char valgrind_path[PATH_MAX] = ""; const char *valgrind_log = NULL; @@ -222,6 +224,7 @@ main(int argc, char **argv) for (i = 1; i < argc; i++) { if (!strcmp(argv[i], "-no-precache")) do_precache = 0; + else if (!strcmp(argv[i], "-valgrind-gdb")) valgrind_gdbserver = 1; else if (!strncmp(argv[i], "-valgrind", sizeof("-valgrind") - 1)) { const char *val = argv[i] + sizeof("-valgrind") - 1; @@ -393,7 +396,7 @@ done: args[0] = "dbus-launch"; args[1] = "--exit-with-session"; - i = 2 + valgrind_append(args + 2, valgrind_mode, valgrind_tool, valgrind_path, valgrind_log); + i = 2 + valgrind_append(args + 2, valgrind_gdbserver, valgrind_mode, valgrind_tool, valgrind_path, valgrind_log); args[i++] = buf; copy_args(args + i, argv + 1, argc - 1); args[i + argc - 1] = NULL; @@ -401,7 +404,7 @@ done: } /* dbus-launch failed - run e direct */ - i = valgrind_append(args, valgrind_mode, valgrind_tool, valgrind_path, valgrind_log); + i = valgrind_append(args, valgrind_gdbserver, valgrind_mode, valgrind_tool, valgrind_path, valgrind_log); args[i++] = buf; copy_args(args + i, argv + 1, argc - 1); args[i + argc - 1] = NULL;