summaryrefslogtreecommitdiffstats
path: root/scripts/kdevelop_debug.sh
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2006-06-08 15:33:01 +0000
committerSascha Hauer <s.hauer@pengutronix.de>2006-06-08 15:33:01 +0000
commit301c6c77a53e6f9e22d3b7d578cad372d4ef100c (patch)
treee056f9d4ccb83ad61865f2a15c801acc6fcd1705 /scripts/kdevelop_debug.sh
parenta0745e005e52d95de2174ec93e8b221cd731faaf (diff)
downloadptxdist-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-xscripts/kdevelop_debug.sh129
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"