Skip to content

Commit 2d33635

Browse files
committed
Help debugging with MSys2 by optionally executing bash with strace
MSys2's strace facility is very useful for debugging... With this patch, the bash will be executed through strace if the environment variable GIT_STRACE_COMMANDS is set, which comes in real handy when investigating issues in the test suite. Also support passing a path to a log file via GIT_STRACE_COMMANDS to force Git to call strace.exe with the `-o <path>` argument, i.e. to log into a file rather than print the log directly. That comes in handy when the output would otherwise misinterpreted by a calling process as part of Git's output. Note: the values "1", "yes" or "true" are *not* specifying paths, but tell Git to let strace.exe log directly to the console. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
1 parent 36fbfaf commit 2d33635

File tree

1 file changed

+26
-0
lines changed

1 file changed

+26
-0
lines changed

compat/mingw.c

+26
Original file line numberDiff line numberDiff line change
@@ -1372,6 +1372,7 @@ static pid_t mingw_spawnve_fd(const char *cmd, const char **argv, char **deltaen
13721372
HANDLE cons;
13731373
const char *(*quote_arg)(const char *arg) =
13741374
is_msys2_sh(*argv) ? quote_arg_msys2 : quote_arg_msvc;
1375+
const char *strace_env;
13751376

13761377
do_unset_environment_variables();
13771378

@@ -1429,6 +1430,31 @@ static pid_t mingw_spawnve_fd(const char *cmd, const char **argv, char **deltaen
14291430
free(quoted);
14301431
}
14311432

1433+
strace_env = getenv("GIT_STRACE_COMMANDS");
1434+
if (strace_env) {
1435+
char *p = path_lookup("strace.exe", 1);
1436+
if (!p)
1437+
return error("strace not found!");
1438+
if (xutftowcs_path(wcmd, p) < 0) {
1439+
free(p);
1440+
return -1;
1441+
}
1442+
free(p);
1443+
if (!strcmp("1", strace_env) ||
1444+
!strcasecmp("yes", strace_env) ||
1445+
!strcasecmp("true", strace_env))
1446+
strbuf_insert(&args, 0, "strace ", 7);
1447+
else {
1448+
const char *quoted = quote_arg(strace_env);
1449+
struct strbuf buf = STRBUF_INIT;
1450+
strbuf_addf(&buf, "strace -o %s ", quoted);
1451+
if (quoted != strace_env)
1452+
free((char *)quoted);
1453+
strbuf_insert(&args, 0, buf.buf, buf.len);
1454+
strbuf_release(&buf);
1455+
}
1456+
}
1457+
14321458
ALLOC_ARRAY(wargs, st_add(st_mult(2, args.len), 1));
14331459
xutftowcs(wargs, args.buf, 2 * args.len + 1);
14341460
strbuf_release(&args);

0 commit comments

Comments
 (0)