mingw: help debugging by optionally executing bash with strace
PATCH 1/1 mingw: help debugging by optionally executing bash with strace
From: Johannes Schindelin <[email protected]>
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.
---
mingw: help debugging by optionally executing bash with MSYS2's strace
This is another patch that has been carried in Git for Windows for some five years. Time to graduate.
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-604%2Fdscho%2Fmsys2-strace-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-604/dscho/msys2-strace-v1
Pull-Request: https://github.com/gitgitgadget/git/pull/604
compat/mingw.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+)
compat/mingw.c +26 -0
@@ -1479,6 +1479,7 @@ static pid_t mingw_spawnve_fd(const char *cmd, const char **argv, char **deltaenconst char *(*quote_arg)(const char *arg) =is_msys2_sh (cmd ? cmd : *argv) ? quote_arg_msys2 : quote_arg_msvc; +const char *strace_env;/* Make sure to override previous errors, if any */ errno =0 ;
@@ -1562,6 +1563,31 @@ static pid_t mingw_spawnve_fd(const char *cmd, const char **argv, char **deltaenfree (quoted); } + strace_env =getenv ("GIT_STRACE_COMMANDS" ); +if (strace_env) { +char *p =path_lookup ("strace.exe" ,1 ); +if (!p) +return error ("strace not found!" ); +if (xutftowcs_path (wcmd, p) <0 ) { +free (p); +return -1 ; + } +free (p); +if (!strcmp ("1" , strace_env) || + !strcasecmp ("yes" , strace_env) || + !strcasecmp ("true" , strace_env)) +strbuf_insert (&args,0 ,"strace " ,7 ); +else { +const char *quoted =quote_arg (strace_env); +struct strbuf buf =STRBUF_INIT ; +strbuf_addf (&buf,"strace -o %s " , quoted); +if (quoted != strace_env) +free ((char *)quoted); +strbuf_insert (&args,0 , buf.buf, buf.len); +strbuf_release (&buf); + } + } +ALLOC_ARRAY (wargs,st_add (st_mult (2 , args.len),1 ));xutftowcs (wargs, args.buf,2 * args.len +1 );strbuf_release (&args);
base-commit: 9fadedd637b312089337d73c3ed8447e9f0aa775
Signature · 1 line
gitgitgadget