diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2006-06-08 15:33:01 +0000 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2006-06-08 15:33:01 +0000 |
commit | 301c6c77a53e6f9e22d3b7d578cad372d4ef100c (patch) | |
tree | e056f9d4ccb83ad61865f2a15c801acc6fcd1705 /scripts/kdevelop_debug.sh | |
parent | a0745e005e52d95de2174ec93e8b221cd731faaf (diff) | |
download | ptxdist-301c6c77a53e6f9e22d3b7d578cad372d4ef100c.tar.gz ptxdist-301c6c77a53e6f9e22d3b7d578cad372d4ef100c.tar.xz |
add script to do remote debugging with kdevelop
git-svn-id: https://svn.pengutronix.de/svn/ptxdist/trunks/ptxdist-0.10-trunk@5656 33e552b5-05e3-0310-8538-816dae2090ed
Diffstat (limited to 'scripts/kdevelop_debug.sh')
-rwxr-xr-x | scripts/kdevelop_debug.sh | 129 |
1 files changed, 129 insertions, 0 deletions
diff --git a/scripts/kdevelop_debug.sh b/scripts/kdevelop_debug.sh new file mode 100755 index 000000000..f65737a3b --- /dev/null +++ b/scripts/kdevelop_debug.sh @@ -0,0 +1,129 @@ +#!/bin/bash +# +# This script is a wrapper to remote debug with kdevelop +# +# (c) 2006 Sascha Hauer, Pengutronix +# +# to debug in a typical ptxdist environment do something like this: +# +# ./kdevelop_debug.sh -e root-debug/bin/busybox -s root-debug \ +# -t 192.168.23.194:1234 \ +# -d arm-softfloat-linux-gnu-gdb +# +# (remember to recompile busybox with debugging symbols for this example) +# + +usage() { + echo + echo "usage: $0 [OPTIONS]" + echo + echo " -e <exec> the executable to debug" + echo " -d <gdb> the gdb executable to use" + echo " -s <solib> the solib-absolute-prefix for gdb" + echo " -h <host:port> host and port for remote debugging" + echo +} + +ptxd_abspath() { + if [ "$#" != "1" ]; then + echo "usage: ptxd_abspath <path>" + exit 1 + fi + DN=`dirname $1` + echo `cd $DN && pwd`/`basename $1` +} + +while getopts "he:t:s:d:" OPT +do + case "$OPT" in + h) usage + exit 1 + ;; + e) executable="$OPTARG" + ;; + t) hostport="$OPTARG" + ;; + s) solib="$OPTARG" + ;; + d) debugger="$OPTARG" + ;; + esac +done +shift `expr $OPTIND - 1` + +if [ -z "$executable" ]; then + echo "no executable given" + exit 1 +fi + +if [ -z "$solib" ]; then + echo "no solib dir given" + exit 1 +fi + +if [ -z "$hostport" ]; then + echo "no hostport given" + exit 1 +fi + +if [ -z "$debugger" ]; then + echo "no gdb executable given. using gdb" + debugger=gdb +fi + +executable=$(ptxd_abspath $executable) +debugdir=$(ptxd_abspath $debugdir) +solib=$(ptxd_abspath $solib) +debugger=$(which $debugger) + +# our temporary project directory +wd=$(mktemp -d) + +# project name, derived from the executable name +name=$(basename $executable) + +# Create a minimal kdevelop project +cat << EOF > "$wd/$name.kdevelop" +<?xml version = '1.0'?> +<kdevelop> + <general> + <author>ptxdist</author> + <projectmanagement>KDevCustomProject</projectmanagement> + <primarylanguage>C</primarylanguage> + </general> + <kdevcustomproject> + <run> + <mainprogram>@MAINPROGRAMM@</mainprogram> + </run> + </kdevcustomproject> + <kdevdebugger> + <general> + <gdbpath>@GDBPATH@</gdbpath> + <runGdbScript>@RUN_GDB_SCRIPT@</runGdbScript> + </general> + </kdevdebugger> +</kdevelop> +EOF + +# replace user given values +sed -i "s^@MAINPROGRAMM@^$name^" "$wd/$name.kdevelop" +sed -i "s^@RUN_GDB_SCRIPT@^$wd/run_gdb^" "$wd/$name.kdevelop" +sed -i "s^@GDBPATH@^$wd^" "$wd/$name.kdevelop" + +# create a run gdb script for kdevelop +run_gdb="$wd/run_gdb" +echo "file $executable" > "$run_gdb" +echo "set solib-absolute-prefix $solib" >> "$run_gdb" +echo "target remote $hostport" >> "$run_gdb" +echo "break main" >> "$run_gdb" + +# copy the executable into the project directory +cp "$executable" "$wd" + +# create a link from the real debugger to the project directory +ln -s "$debugger" "$wd/gdb" + +# doit +cd "$wd" && kdevelop "$wd/$name.kdevelop" + +rm -rf "$wd" |