diff --git a/cdtdebug.man b/cdtdebug.man new file mode 100644 index 0000000..710d76f --- /dev/null +++ b/cdtdebug.man @@ -0,0 +1,85 @@ +.\" Manpage for cdtdebug. +.\" Contact jjohnstn@redhat.com to correct errors or typos. +.TH man 1 "07 July 2014" "1.0" "cdtdebug man page" +.SH NAME +cdtdebug \- The Eclipse C/C++ Stand-alone Debugger +.SH SYNOPSIS +cdtdebug [ +.I "ECLIPSE-OPTIONS" +] [ +.B -h, --help +] [ +.B -b +.I build-log +] [ +.B -a +] | [ +.B -c +.I core +] +.B -e +.I executable... +] +.SH DESCRIPTION +cdtdebug is a graphical C/C++ debugger using Eclipse and gdb. The debugger uses Eclipse plug-ins and features found in the eclipse-cdt package +and invokes an Eclipse application specialized to bring up just the C/C++ debugging elements. The debugger can be used to debug executables, +core files, and can also attach to existing processes. Internally, gdb is used to perform the debugging tasks via the gdb/mi interface. For more info, see the upstream +.UR https://wiki.eclipse.org/CDT/StandaloneDebugger +wiki page +.UE . +.SH OPTIONS +.PP +Operation modes: +.IP "\fB-h, --help\fR" +.PD +print help, then exit. +.PD +.PP +Indexing assist options: +.IP "\fB-b \fIbuild-log\fR" +.PD +specify build log to use for compiler includes/flags. +.PP +Target options: +.IP "\fB-a\fR" +.PD +attach to an existing process (list will be shown). +.PD +.IP "\fB-c \fIcore\fR" +.PD +debug core file (need to also specify corresponding executable). +.PD +.IP "\fB-e \fIexecutable\fR [ \fIargs...\fR ] +.PD +debug given executable (passing +.I args +to main). +.PD +.PP +The +.B -e +option must be used last as subsequent options are passed to main. + +Specifying insufficient arguments for a particular target will result in a +dialog displayed to enter the required values for that target. Specifying +no target option brings up a dialog for debugging an executable with the +executable path, program arguments, and build log filled in from the last +.B -e +invocation, if one exists. + +For details on options that can be passed to Eclipse, see: +.UR http://help.eclipse.org/luna/index.jsp?topic=%2Forg.eclipse.platform.doc.user%2Ftasks%2Frunning_eclipse.htm +.UE . +.SH SEE ALSO +.I gdb(1) +.SH BUGS +No known bugs. +.SH AUTHOR +Jeff Johnston (jjohnstn@redhat.com) +.SH COPYRIGHT +Copyright (c) 2014 Red Hat Inc. + +Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with the Invariant Sections being "Free Software" and "Free Software Needs Free Documentation", with the Front-Cover Texts being "A GNU Manual," and with the Back-Cover Texts as in (a) below. + +(a) The FSF's Back-Cover Text is: "You are free to copy and modify this GNU Manual. Buying copies from GNU Press supports the FSF in developing GNU and promoting software freedom." + diff --git a/eclipse-cdt-cdtdebug.patch b/eclipse-cdt-cdtdebug.patch index 6ece8ea..c01bd75 100644 --- a/eclipse-cdt-cdtdebug.patch +++ b/eclipse-cdt-cdtdebug.patch @@ -10,7 +10,7 @@ diff -up ./debug/org.eclipse.cdt.debug.application/scripts/cdtdebug.sh.orig ./de -cp config.ini $HOME/cdtdebugger -cp dev.properties $HOME/cdtdebugger +ECLIPSE_HOME=@ECLIPSE_HOME@ -+if [ $0 .nt $HOME/fcdtdebugger ]; then ++if [ $0 -nt $HOME/fcdtdebugger ]; then +rm -rf $HOME/fcdtdebugger >/dev/null +mkdir -p $HOME/fcdtdebugger +cp config.ini $HOME/fcdtdebugger @@ -20,7 +20,8 @@ diff -up ./debug/org.eclipse.cdt.debug.application/scripts/cdtdebug.sh.orig ./de -cd ../.. +cd $ECLIPSE_HOME/plugins OSGI_JAR=`ls org.eclipse.osgi_*.jar` - SWT_JAR=`ls org.eclipse.swt.*.jar` +-SWT_JAR=`ls org.eclipse.swt.*.jar` ++SWT_JAR=`ls -d org.eclipse.swt.*` SWT_PLUGIN=`echo $SWT_JAR | sed -e "s/_[0-9]*\..*.jar//"` -FS_JAR=`ls org.eclipse.core.filesystem.*.jar` +FS_JAR=`ls org.eclipse.core.filesystem*.jar | grep -v java7` diff --git a/eclipse-cdt-cdtdebug.patch2 b/eclipse-cdt-cdtdebug.patch2 new file mode 100644 index 0000000..a268b64 --- /dev/null +++ b/eclipse-cdt-cdtdebug.patch2 @@ -0,0 +1,248 @@ +diff -up ./debug/org.eclipse.cdt.debug.application/scripts/cdtdebug.sh.fix ./debug/org.eclipse.cdt.debug.application/scripts/cdtdebug.sh +--- ./debug/org.eclipse.cdt.debug.application/scripts/cdtdebug.sh.fix 2014-07-10 13:27:20.764243433 -0400 ++++ ./debug/org.eclipse.cdt.debug.application/scripts/cdtdebug.sh 2014-07-10 13:27:25.076314647 -0400 +@@ -10,27 +10,91 @@ + # Red Hat Inc. - initial API and implementation + ############################################################################### + ECLIPSE_HOME=@ECLIPSE_HOME@ ++# Make sure local directory exists and is up to date + if [ $0 -nt $HOME/fcdtdebugger ]; then + rm -rf $HOME/fcdtdebugger >/dev/null + mkdir -p $HOME/fcdtdebugger + cp config.ini $HOME/fcdtdebugger + cp dev.properties $HOME/fcdtdebugger + fi ++ ++usage="\ ++Usage: $0 [ECLIPSE_OPTIONS] [-b BUILD_LOG] [TARGET_OPTION] ++ ++Debug an executable, core-file, or an existing process using the Eclipse ++C/C++ Stand-alone Debugger. Eclipse command-line options may be passed ++except for -vmargs which is being used to start up the Eclipse Debugger. ++ ++Operation modes: ++ -h, --help print this help, then exit ++ ++Indexing assist options: ++ -b BUILD_LOG build log to use for compiler includes/flags ++ ++Target options: ++ -a attach to an existing process (list will be shown) ++ -c COREFILE debug core-file (should also specify executable) ++ -e EXECUTABLE [ARGS...] debug given executable (passing ARGS to main) ++ ++The -e option must be used last as subsequent options are passed to main. ++ ++Specifying insufficient arguments for a particular target will result in a ++dialog displayed to enter the required values for that target. Specifying ++no target option brings up a dialog for debugging an executable with the ++executable path, program arguments, and build log filled in from the last -e ++invocation, if one exists. ++ ++Wiki page: " ++ ++exit_missing_arg=' ++ echo $0": error: option [$1] requires an argument"; exit 1' ++ ++# Parse command line. ++options= ++while test $# -gt 0 ; do ++ case $1 in ++ --help | -h ) ++ echo "$usage"; exit ;; ++ -vmargs ) ++ echo $0": error: -vmargs option is prohibited"; exit 1;; ++ -e ) ++ test $# = 1 && eval "$exit_missing_arg" ++ options="$options $1 $2" ++ shift; shift; ++ # Get all options after -e and protect them from being ++ # processed by Eclipse as Eclipse options ++ while test $# -gt 0; do ++ options="$options \"$1\"" ++ shift; ++ done ;; ++ -c ) ++ test $# = 1 && eval "$exit_missing_arg" ++ options="$options $1 $2" ++ shift; shift ;; ++ * ) ++ options="$options $1"; shift ;; ++ esac ++done ++ ++ ++# Calculate platform-specific jar file names + olddir=`pwd` + cd $ECLIPSE_HOME/plugins + OSGI_JAR=`ls org.eclipse.osgi_*.jar` + SWT_JAR=`ls -d org.eclipse.swt.*` + SWT_PLUGIN=`echo $SWT_JAR | sed -e "s/_[0-9]*\..*.jar//"` +-FS_JAR=`ls org.eclipse.core.filesystem*.jar | grep -v java7` ++FS_JAR=`ls org.eclipse.core.filesystem.*.jar | grep -v java7` + FS_PLUGIN=`echo $FS_JAR | sed -e "s/_[0-9]*\..*.jar//"` + cd @CDT_DROPINS@ + LINUX_JAR=`ls org.eclipse.cdt.core.linux.*.jar` + LINUX_PLUGIN=`echo $LINUX_JAR | sed -e "s/_[0-9]*\..*.jar//"` + cd $olddir ++ ++# Run eclipse with the Stand-alone Debugger product specified + $ECLIPSE_HOME/eclipse -clean -product org.eclipse.cdt.debug.application.product \ + -application org.eclipse.cdt.debug.application.app \ + -data $HOME/workspace-fcdtdebug -configuration file\:$HOME/fcdtdebugger \ +--dev file\:$HOME/fcdtdebugger/dev.properties $@ \ ++-dev file\:$HOME/fcdtdebugger/dev.properties $options \ + -vmargs -Dosgi.jar=$OSGI_JAR -Dswt.plugin=$SWT_PLUGIN -Dfs.plugin=$FS_PLUGIN \ + -Dlinux.plugin=$LINUX_PLUGIN -Declipse.home=$ECLIPSE_HOME + +diff -up ./debug/org.eclipse.cdt.debug.application/scripts/install.sh.fix ./debug/org.eclipse.cdt.debug.application/scripts/install.sh +--- ./debug/org.eclipse.cdt.debug.application/scripts/install.sh.fix 2014-07-10 13:28:02.635933926 -0400 ++++ ./debug/org.eclipse.cdt.debug.application/scripts/install.sh 2014-07-10 13:29:28.325347751 -0400 +@@ -9,16 +9,4 @@ + # Contributors: + # Red Hat Inc. - initial API and implementation + ############################################################################### +-if [ ! -d $HOME/cdtdebugger ]; then +-mkdir -p $HOME/cdtdebugger +-fi +-cp config.ini $HOME/cdtdebugger +-cp dev.properties $HOME/cdtdebugger +-cp cdtdebug.sh $HOME/cdtdebugger +-chmod +x $HOME/cdtdebugger/cdtdebug.sh +-olddir=`pwd` +-cd ../.. +-PLUGINS_DIR=`pwd` +-cd $olddir +-sed -i -e "s,cd ../..,cd $PLUGINS_DIR," $HOME/cdtdebugger/cdtdebug.sh +-echo "Installation complete" ++echo "Installation already done" +diff -up ./debug/org.eclipse.cdt.debug.application/scripts/README.fix ./debug/org.eclipse.cdt.debug.application/scripts/README +--- ./debug/org.eclipse.cdt.debug.application/scripts/README.fix 2014-07-10 13:30:00.077871376 -0400 ++++ ./debug/org.eclipse.cdt.debug.application/scripts/README 2014-07-10 13:30:24.686277721 -0400 +@@ -37,11 +37,4 @@ an executable, build log, and program ar + + e.g. cdtdebug -b ~/build.log ~/myproject/bin/a.out arg1 arg2 + +-The cdtdebug.sh script that is found in the plug-in can also be run directly, but only +-from the scripts directory as it uses relative directories to find the Eclipse instance and +-the plugins directory. The one installed in the cdtdebugger directory replaces these +-relative directory references with absolute ones. +- +- e.g. sh ./cdtdebug.sh -b ~/build.log ~/myproject/bin/a.out arg1 arg2 +- + +diff -up ./debug/org.eclipse.cdt.debug.application/src/org/eclipse/cdt/debug/application/ApplicationWorkbenchWindowAdvisor.java.fix ./debug/org.eclipse.cdt.debug.application/src/org/eclipse/cdt/debug/application/ApplicationWorkbenchWindowAdvisor.java +--- ./debug/org.eclipse.cdt.debug.application/src/org/eclipse/cdt/debug/application/ApplicationWorkbenchWindowAdvisor.java.fix 2014-07-10 13:31:50.775697240 -0400 ++++ ./debug/org.eclipse.cdt.debug.application/src/org/eclipse/cdt/debug/application/ApplicationWorkbenchWindowAdvisor.java 2014-07-10 13:32:17.761142405 -0400 +@@ -10,8 +10,12 @@ + *******************************************************************************/ + package org.eclipse.cdt.debug.application; + ++import java.io.BufferedReader; + import java.io.File; + import java.io.FileNotFoundException; ++import java.io.IOException; ++import java.io.InputStream; ++import java.io.InputStreamReader; + import java.lang.reflect.InvocationTargetException; + + import org.eclipse.cdt.debug.core.ICDTLaunchConfigurationConstants; +@@ -19,11 +23,13 @@ import org.eclipse.cdt.internal.debug.ap + import org.eclipse.cdt.internal.debug.application.DebugCoreFile; + import org.eclipse.cdt.internal.debug.application.DebugExecutable; + import org.eclipse.cdt.internal.debug.application.JobContainer; ++import org.eclipse.cdt.utils.spawner.ProcessFactory; + import org.eclipse.core.resources.ResourcesPlugin; + import org.eclipse.core.runtime.CoreException; + import org.eclipse.core.runtime.IProgressMonitor; + import org.eclipse.core.runtime.IStatus; + import org.eclipse.core.runtime.MultiStatus; ++import org.eclipse.core.runtime.Path; + import org.eclipse.core.runtime.Platform; + import org.eclipse.core.runtime.QualifiedName; + import org.eclipse.core.runtime.Status; +@@ -105,6 +111,37 @@ public class ApplicationWorkbenchWindowA + } + } + ++ // Private method to search for executable names on PATH ++ private String findExecutable(String input) { ++ String result = input; ++ ++ Path x = new Path(input); ++ try { ++ if (!x.isAbsolute() && x.segmentCount() == 1) { ++ String command = "which " + input; //$NON-NLS-1$ ++ Process p = null; ++ InputStream in = null; ++ try { ++ p = ProcessFactory.getFactory().exec(command); ++ in = p.getInputStream(); ++ InputStreamReader reader = new InputStreamReader(in); ++ BufferedReader br = new BufferedReader(reader); ++ String line = br.readLine(); ++ if (line != null) ++ result = line; ++ } finally { ++ if (in != null) ++ in.close(); ++ if (p != null) ++ p.destroy(); ++ } ++ } ++ } catch (IOException e) { ++ // do nothing ++ } ++ return result; ++ } ++ + public class PostWindowCreateRunnable implements IRunnableWithProgress { + + @Override +@@ -143,7 +180,7 @@ public class ApplicationWorkbenchWindowA + else if ("-e".equals(args[i])) { + ++i; + if (i < args.length) +- executable = args[i]; ++ executable = findExecutable(args[i]); + ++i; + StringBuffer argBuffer = new StringBuffer(); + // Remaining values are arguments to the executable +@@ -158,14 +195,19 @@ public class ApplicationWorkbenchWindowA + } + // Verify any core file or executable path is valid. + if (corefile != null) { +- File executableFile = new File(executable); ++ File executableFile = null; ++ if (executable != null) { ++ executableFile = new File(executable); ++ executable = executableFile.getCanonicalPath(); ++ } + File coreFile = new File(corefile); +- if (!executableFile.exists() || !coreFile.exists()) { ++ corefile = coreFile.getCanonicalPath(); ++ if (executable == null || !executableFile.exists() || !coreFile.exists()) { + final CoreFileInfo info = new CoreFileInfo("", "", ""); //$NON-NLS-1$ $NON-NLS-2$ $NON-NLS-3$ + final IStatus errorStatus = new Status(IStatus.ERROR, Activator.PLUGIN_ID, 0, + Messages.GdbDebugNewExecutableCommand_Binary_file_does_not_exist, null); + final String executablePath = executable; +- final String coreFilePath = buildLog; ++ final String coreFilePath = corefile; + + Display.getDefault().syncExec(new Runnable() { + +@@ -197,7 +239,13 @@ public class ApplicationWorkbenchWindowA + } + } else if (executable != null) { + File executableFile = new File(executable); +- if (!executableFile.exists()) { ++ executable = executableFile.getCanonicalPath(); ++ File buildLogFile = null; ++ if (buildLog != null) { ++ buildLogFile = new File(buildLog); ++ buildLog = buildLogFile.getCanonicalPath(); ++ } ++ if (!executableFile.exists() || (buildLog != null && !buildLogFile.exists())) { + final NewExecutableInfo info = new NewExecutableInfo("", "", "", ""); //$NON-NLS-1$ $NON-NLS-2$ $NON-NLS-3$ + final IStatus errorStatus = new Status(IStatus.ERROR, Activator.PLUGIN_ID, 0, + Messages.GdbDebugNewExecutableCommand_Binary_file_does_not_exist, null); diff --git a/eclipse-cdt.spec b/eclipse-cdt.spec index 4c0d1c2..f5f0fd3 100644 --- a/eclipse-cdt.spec +++ b/eclipse-cdt.spec @@ -28,7 +28,7 @@ Epoch: 1 Summary: Eclipse C/C++ Development Tools (CDT) plugin Name: %{?scl_prefix}eclipse-cdt Version: %{majmin}.%{micro} -Release: 1%{?dist} +Release: 2%{?dist} License: EPL and CPL Group: Development/Tools URL: http://www.eclipse.org/cdt @@ -40,6 +40,9 @@ Source2: http://git.eclipse.org/c/linuxtools/org.eclipse.linuxtools.git/snapshot Source3: eclipse-cdt.desktop +# man-page for /usr/bin/cdtdebug +Source4: cdtdebug.man + # Script to run the tests in Xvnc Source5: %{name}-runtests.sh @@ -89,6 +92,10 @@ Patch13: %{pkg_name}-cdtdebug-readme.patch # Following fixes jetty reqs in CDT target Patch14: %{pkg_name}-target.patch +# Following add help support for cdtdebug and fixes executable location support to +# include system path and properly use relative directories +Patch15: %{pkg_name}-cdtdebug.patch2 + BuildRequires: tycho BuildRequires: tycho-extras BuildRequires: %{?scl_prefix}eclipse-pde >= 1:4.3.0 @@ -158,6 +165,10 @@ Source for Eclipse CDT for use within Eclipse. mkdir desktop cp %{SOURCE3} desktop +# handle man page +mkdir man +cp %{SOURCE4} man + pushd %{cdt_snapshot} %patch0 -p1 %patch4 -p1 @@ -168,6 +179,7 @@ pushd %{cdt_snapshot} %patch12 -p1 %patch13 -p1 %patch14 -p1 +%patch15 -p1 sed -i -e 's/x86<\/arch>/%{eclipse_arch}<\/arch>/g' pom.xml # Add secondary arch support if we are building there %ifarch %{arm} s390 s390x aarch64 @@ -303,12 +315,14 @@ parsersInstallDir=${installDir}-parsers llvmInstallDir=${installDir}-llvm sdkInstallDir=${installDir}-sdk binInstallDir=${RPM_BUILD_ROOT}/%{_bindir} +manInstallDir=${RPM_BUILD_ROOT}/%{_mandir}/man1 install -d -m755 $installDir install -d -m755 $parsersInstallDir install -d -m755 $llvmInstallDir install -d -m755 $sdkInstallDir install -d -m755 $testInstallDir install -d -m755 $binInstallDir +install -d -m755 $manInstallDir # Unzip contents of the cdt repo, removing all but plugins and features unzip -q -o %{cdt_snapshot}/releng/org.eclipse.cdt.repo/target/org.eclipse.cdt.repo.zip \ @@ -392,6 +406,8 @@ PLUGIN=$(ls . | grep org.eclipse.cdt.debug.ui_) sed -i -e "s,org.eclipse.cdt.debug.ui\,,file\\\\:%{eclipse_base}/dropins/cdt/eclipse/plugins/$PLUGIN\,," org.eclipse.cdt.debug.application_$DEBUGAPPLICATIONVERSION/scripts/config.ini PLUGIN=$(ls . | grep org.eclipse.cdt.debug.core_) sed -i -e "s,org.eclipse.cdt.debug.core\,,file\\\\:%{eclipse_base}/dropins/cdt/eclipse/plugins/$PLUGIN\,," org.eclipse.cdt.debug.application_$DEBUGAPPLICATIONVERSION/scripts/config.ini +PLUGIN=$(ls . | grep org.eclipse.cdt.core.native_) +sed -i -e "s,org.eclipse.cdt.core.native\,,file\\\\:%{eclipse_base}/dropins/cdt/eclipse/plugins/$PLUGIN\,," org.eclipse.cdt.debug.application_$DEBUGAPPLICATIONVERSION/scripts/config.ini PLUGIN=$(ls . | grep 'org.eclipse.cdt.core.linux\..*.jar' | grep -v source) sed -i -e "s,\$linux.plugin\$\,,file\\\\:%{eclipse_base}/dropins/cdt/eclipse/plugins/$PLUGIN\,," org.eclipse.cdt.debug.application_$DEBUGAPPLICATIONVERSION/scripts/config.ini sed -i -e "s,cp config.ini,cp %{eclipse_base}/dropins/cdt/eclipse/plugins/org.eclipse.cdt.debug.application_$DEBUGAPPLICATIONVERSION/scripts/config.ini," org.eclipse.cdt.debug.application_$DEBUGAPPLICATIONVERSION/scripts/cdtdebug.sh @@ -402,6 +418,9 @@ popd install -D desktop/eclipse-cdt.desktop $RPM_BUILD_ROOT/%{_datadir}/applications/%{?scl_prefix}eclipse-cdt.desktop desktop-file-validate $RPM_BUILD_ROOT/%{_datadir}/applications/%{?scl_prefix}eclipse-cdt.desktop +# man page +cp man/cdtdebug.man $manInstallDir/cdtdebug.1 + # Unpack all existing feature jars for x in $installDir/eclipse/features/*.jar; do dirname=`echo $x | sed -e 's:\\(.*\\)\\.jar:\\1:g'` @@ -459,6 +478,7 @@ rm -rf $installDir/eclipse/binary %{eclipse_base}/dropins/cdt %{_bindir}/cdtdebug %{_datadir}/applications/* +%{_mandir}/man1/cdtdebug.1* %doc %{cdt_snapshot}/releng/org.eclipse.cdt.releng/epl-v10.html %doc %{cdt_snapshot}/releng/org.eclipse.cdt.releng/notice.html @@ -483,6 +503,10 @@ rm -rf $installDir/eclipse/binary %doc %{cdt_snapshot}/releng/org.eclipse.cdt.releng/notice.html %changelog +* Thu Jul 10 2014 Jeff Johnston 1:8.4.0-2 +- Update Stand-alone debugger support to include fixes, help + support, and a man page + * Thu Jun 26 2014 Jeff Johnston 1:8.4.0-1 - Update to offical Luna CDT 8.4.0 and Linux Tools 3.0