mirror of
				https://github.com/ggml-org/llama.cpp.git
				synced 2025-10-31 08:51:55 +00:00 
			
		
		
		
	 fed0108491
			
		
	
	fed0108491
	
	
	
		
			
			* A little documentation that shares my quick tips for working in the repository. * Update startup-testing-debugging.md * script that shows a menu of tests to pick from & run the debugger on * debug-test.sh: Refactor CLI help message * debug-test.sh: documentation update * debug-test.sh: CLI Help output corrections * debug-test.sh: minor doc fix --------- authored-by: Josh Ramer <ubuntu@ip-172-31-32-53.ec2.internal> Assisted-by: brian khuu <mofosyne@gmail.com>
		
			
				
	
	
		
			118 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			118 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/bin/bash
 | |
| test_suite=${1:-}
 | |
| test_number=${2:-}
 | |
| 
 | |
| PROG=${0##*/}
 | |
| build_dir="build-ci-debug"
 | |
| 
 | |
| if [ x"$1" = x"-h" ] || [ x"$1" = x"--help" ]; then
 | |
|     echo "Usage: $PROG [OPTION]... <test_regex> (test_number)"
 | |
|     echo "Debug specific ctest program."
 | |
|     echo
 | |
|     echo "Options:"
 | |
|     echo "  -h, --help       Display this help and exit"
 | |
|     echo
 | |
|     echo "Arguments:"
 | |
|     echo "  <test_regex>     (Mandatory) Supply one regex to the script to filter tests"
 | |
|     echo "  (test_number)    (Optional) Test number to run a specific test"
 | |
|     echo
 | |
|     echo "Example:"
 | |
|     echo "  $PROG test-tokenizer"
 | |
|     echo "  $PROG test-tokenizer 3"
 | |
|     echo
 | |
|     exit 0
 | |
| fi
 | |
| 
 | |
| # Function to select and debug a test
 | |
| function select_test() {
 | |
|     test_suite=${1:-test}
 | |
|     test_number=${2:-}
 | |
| 
 | |
|     # Sanity Check If Tests Is Detected
 | |
|     printf "\n\nGathering tests that fit REGEX: ${test_suite} ...\n"
 | |
|     tests=($(ctest -R ${test_suite} -V -N | grep -E " +Test +#[0-9]+*" | cut -d':' -f2 | awk '{$1=$1};1'))
 | |
|     if [ ${#tests[@]} -eq 0 ]
 | |
|     then
 | |
|         echo "No tests avaliable... check your compliation process..."
 | |
|         echo "Exiting."
 | |
|         exit 1
 | |
|     fi
 | |
| 
 | |
|     if [ -z $test_number ]
 | |
|     then
 | |
|         # List out avaliable tests
 | |
|         printf "Which test would you like to debug?\n"
 | |
|         id=0
 | |
|         for s in "${tests[@]}"
 | |
|         do
 | |
|             echo "Test# ${id}"
 | |
|             echo "  $s"
 | |
|             ((id++))
 | |
|         done
 | |
| 
 | |
|         # Prompt user which test they wanted to run
 | |
|         printf "\nRun test#? "
 | |
|         read test_number
 | |
|     else
 | |
|         printf "\nUser Already Requested #${test_number}"
 | |
|     fi
 | |
| 
 | |
|     # Start GDB with the requested test binary and arguments
 | |
|     printf "Debugging(GDB) test: ${tests[test_number]}\n"
 | |
|     # Change IFS (Internal Field Separator)
 | |
|     sIFS=$IFS
 | |
|     IFS=$'\n'
 | |
| 
 | |
|     # Get test args
 | |
|     gdb_args=($(ctest -R ${test_suite} -V -N | grep "Test command" | cut -d':' -f3 | awk '{$1=$1};1' ))
 | |
|     IFS=$sIFS
 | |
|     printf "Debug arguments: ${gdb_args[test_number]}\n\n"
 | |
| 
 | |
|     # Expand paths if needed
 | |
|     args=()
 | |
|     for x in $(echo ${gdb_args[test_number]} | sed -e 's/"\/\<//' -e 's/\>"//')
 | |
|     do
 | |
|         args+=($(echo $x | sed -e 's/.*\/..\//..\//'))
 | |
|     done
 | |
| 
 | |
|     # Execute debugger
 | |
|     echo "gdb args: ${args[@]}"
 | |
|     gdb --args ${args[@]}
 | |
| }
 | |
| 
 | |
| # Step 0: Check the args
 | |
| if [ -z "$test_suite" ]
 | |
| then
 | |
|     echo "Usage: $PROG [OPTION]... <test_regex> (test_number)"
 | |
|     echo "Supply one regex to the script to filter tests,"
 | |
|     echo "and optionally a test number to run a specific test."
 | |
|     echo "Use --help flag for full instructions"
 | |
|     exit 1
 | |
| fi
 | |
| 
 | |
| # Step 1: Reset and Setup folder context
 | |
| ## Sanity check that we are actually in a git repo
 | |
| repo_root=$(git rev-parse --show-toplevel)
 | |
| if [ ! -d "$repo_root" ]; then
 | |
|     echo "Error: Not in a Git repository."
 | |
|     exit 1
 | |
| fi
 | |
| 
 | |
| ## Reset folder to root context of git repo
 | |
| pushd "$repo_root" || exit 1
 | |
| 
 | |
| ## Create and enter build directory
 | |
| rm -rf "$build_dir" && mkdir "$build_dir" || exit 1
 | |
| 
 | |
| # Step 2: Setup Build Environment and Compile Test Binaries
 | |
| cmake -B "./$build_dir" -DCMAKE_BUILD_TYPE=Debug -DLLAMA_CUDA=1 -DLLAMA_FATAL_WARNINGS=ON || exit 1
 | |
| pushd "$build_dir" && make -j || exit 1
 | |
| 
 | |
| # Step 3: Debug the Test
 | |
| select_test "$test_suite" "$test_number"
 | |
| 
 | |
| # Step 4: Return to the directory from which the user ran the command.
 | |
| popd || exit 1
 | |
| popd || exit 1
 | |
| popd || exit 1
 |