From 6a94088cc3d539bdc15b824befc083f7ff8d0288 Mon Sep 17 00:00:00 2001 From: Johannes Schindelin Date: Fri, 30 Oct 2015 12:02:56 -0700 Subject: test: facilitate debugging Git executables in tests with gdb When prefixing a Git call in the test suite with 'debug ', it will now be run with GDB, allowing the developer to debug test failures more conveniently. Signed-off-by: Johannes Schindelin Signed-off-by: Jonathan Nieder Signed-off-by: Junio C Hamano --- t/README | 5 +++++ t/test-lib-functions.sh | 8 ++++++++ wrap-for-bin.sh | 8 +++++++- 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/t/README b/t/README index 35438bca48..1dc908e43a 100644 --- a/t/README +++ b/t/README @@ -563,6 +563,11 @@ library for your script to use. argument. This is primarily meant for use during the development of a new test script. + - debug + + Run a git command inside a debugger. This is primarily meant for + use when debugging a failing test script. + - test_done Your test script must have test_done at the end. Its purpose diff --git a/t/test-lib-functions.sh b/t/test-lib-functions.sh index 6dffb8bcde..73e37a1f6c 100644 --- a/t/test-lib-functions.sh +++ b/t/test-lib-functions.sh @@ -145,6 +145,14 @@ test_pause () { fi } +# Wrap git in gdb. Adding this to a command can make it easier to +# understand what is going on in a failing test. +# +# Example: "debug git checkout master". +debug () { + GIT_TEST_GDB=1 "$@" +} + # Call test_commit with the arguments " [ [ []]]" # # This will commit a file with the given contents and the given commit diff --git a/wrap-for-bin.sh b/wrap-for-bin.sh index 701d2339b9..db0ec6a737 100644 --- a/wrap-for-bin.sh +++ b/wrap-for-bin.sh @@ -19,4 +19,10 @@ GIT_TEXTDOMAINDIR='@@BUILD_DIR@@/po/build/locale' PATH='@@BUILD_DIR@@/bin-wrappers:'"$PATH" export GIT_EXEC_PATH GITPERLLIB PATH GIT_TEXTDOMAINDIR -exec "${GIT_EXEC_PATH}/@@PROG@@" "$@" +if test -n "$GIT_TEST_GDB" +then + unset GIT_TEST_GDB + exec gdb --args "${GIT_EXEC_PATH}/@@PROG@@" "$@" +else + exec "${GIT_EXEC_PATH}/@@PROG@@" "$@" +fi -- cgit v1.2.1