Junio C Hamano wrote: > Johannes Schindelin <Johannes.Schindelin@xxxxxx> writes: >> On Tue, 27 Oct 2015, Junio C Hamano wrote: >>> It can be called GDB=1, perhaps? >> >> No, this is way too generic. As I only test that the environment >> variable's existence, even something like GDB=/usr/opt/gdb/bin/gdb would >> trigger it. >> >> I could be talked into GDB_GIT=1, though. > > As I said in another message, I have no preference myself over the > name of this variable (or making it a shell function like Duy > mentioned, which incidentally may give us more visual pleasantness > by losing '='). > > I'd just be happy as long as the feature becomes available, and I'd > leave the choice of consistent and convenient naming to others who > have stronger opinions ;-) Here's a suggested patch. -- >8 -- From: Johannes Schindelin <johannes.schindelin@xxxxxx> Subject: 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 <johannes.schindelin@xxxxxx> Signed-off-by: Jonathan Nieder <jrnieder@xxxxxxxxx> --- 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 35438bc..1dc908e 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 <git-command> + + 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 6dffb8b..73e37a1 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 "<message> [<file> [<contents> [<tag>]]]" # # 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 701d233..db0ec6a 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 -- 2.6.0.rc2.230.g3dd15c0 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html