branch: master commit 20947cb461a44f2cb4e770e95c3ede7467e70186 Merge: 05c3099 d7bac58 Author: rocky <ro...@gnu.org> Commit: rocky <ro...@gnu.org>
Merge commit 'd7bac581f04756582078cd9ea45e5a28406ee05c' --- packages/realgud/realgud.el | 3 ++- packages/realgud/realgud/common/core.el | 16 +++++++++---- packages/realgud/realgud/common/helper.el | 5 ++++ packages/realgud/realgud/common/track.el | 32 +++++++++++++++++++++++++ packages/realgud/realgud/debugger/gdb/core.el | 7 +++--- packages/realgud/test/test-regexp-remake.el | 27 +++++++++++++-------- 6 files changed, 72 insertions(+), 18 deletions(-) diff --git a/packages/realgud/realgud.el b/packages/realgud/realgud.el index 8e0fa97..b16cc48 100644 --- a/packages/realgud/realgud.el +++ b/packages/realgud/realgud.el @@ -24,7 +24,8 @@ ;;; Commentary: -;; A modular GNU Emacs front-end for interacting with external debuggers. +;; A modular, extensible GNU Emacs front-end for interacting with +;; external debuggers. ;; ;; Quick start: https://github.com/realgud/realgud/ ;; diff --git a/packages/realgud/realgud/common/core.el b/packages/realgud/realgud/common/core.el index c051e26..ad5dd6a 100644 --- a/packages/realgud/realgud/common/core.el +++ b/packages/realgud/realgud/common/core.el @@ -1,4 +1,4 @@ -;; Copyright (C) 2010-2015 Free Software Foundation, Inc +;; Copyright (C) 2010-2016 Free Software Foundation, Inc ;; Author: Rocky Bernstein <ro...@gnu.org> @@ -12,7 +12,9 @@ ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. -; (require 'term) +;; (require 'term) +(require 'files) + (if (< emacs-major-version 24) (error "You need at least Emacs 24 or greater to run this - you have version %d" @@ -195,10 +197,16 @@ the buffer and data associated with it are already gone." (message "That's all folks.... %s" string)) (defun realgud:binary (file-name) -"Return a priority for whether file-name is likely we can run gdb on" - (let ((output (shell-command-to-string (format "file %s" file-name)))) + "Return a whether FILE-NAME is executable or not or very large" + (let* ((truename (file-chase-links file-name)) + (output (shell-command-to-string + (format "file %s" truename))) + (filesize (nth 7 (file-attributes truename))) + ) (cond ((string-match "ELF" output) t) + ((and large-file-warning-threshold filesize + (> filesize large-file-warning-threshold)) t) ('t nil)))) diff --git a/packages/realgud/realgud/common/helper.el b/packages/realgud/realgud/common/helper.el index 82bc878..705100d 100644 --- a/packages/realgud/realgud/common/helper.el +++ b/packages/realgud/realgud/common/helper.el @@ -13,6 +13,7 @@ ;; GNU General Public License for more details. (require 'cl-lib) +(require 'cl) ;;; Miscellaneous utility functions (require 'load-relative) @@ -102,3 +103,7 @@ gives: ;; (eval (intern var-str)))) (provide-me "realgud-") + +;; Local Variables: +;; byte-compile-warnings: (not cl-functions) +;; End: diff --git a/packages/realgud/realgud/common/track.el b/packages/realgud/realgud/common/track.el index 971534b..f047c13 100644 --- a/packages/realgud/realgud/common/track.el +++ b/packages/realgud/realgud/common/track.el @@ -206,6 +206,10 @@ evaluating (realgud-cmdbuf-info-loc-regexp realgud-cmdbuf-info)" (realgud-cmdbuf-pat "brkpt-disable") nil) (setq frame-num (realgud-track-selected-frame text)) + (if (and frame-num (not loc)) + (setq loc (realgud-track-loc-from-selected-frame + text cmd-mark))) + (setq bp-loc (realgud-track-bp-loc text-sans-loc cmd-mark cmdbuf)) (if bp-loc (let ((src-buffer (realgud-loc-goto bp-loc))) @@ -600,6 +604,30 @@ loc-regexp pattern" ) +(defun realgud-track-loc-from-selected-frame(text cmd-mark &optional + opt-regexp opt-ignore-file-re) + "Return a selected frame number found in TEXT or nil if none found." + (if (realgud-cmdbuf?) + (let ((selected-frame-pat (realgud-cmdbuf-pat "selected-frame")) + (frame-num-regexp) + (ignore-file-re (or opt-ignore-file-re + (realgud-sget 'cmdbuf-info 'ignore-file-re)))) + (if (and selected-frame-pat + (setq frame-num-regexp (realgud-loc-pat-regexp + selected-frame-pat))) + (if (string-match frame-num-regexp text) + (let* ((file-group (realgud-loc-pat-file-group selected-frame-pat)) + (line-group (realgud-loc-pat-line-group selected-frame-pat)) + (filename (match-string file-group text)) + (lineno (string-to-number (match-string line-group text)))) + (if (and filename lineno) + (realgud:file-loc-from-line filename lineno + cmd-mark nil nil ignore-file-re) + nil)) + nil) + nil)) + nil)) + (defun realgud-track-termination?(text) "Return 't and call `realgud:terminate' we we have a termination message" (if (realgud-cmdbuf?) @@ -762,3 +790,7 @@ command buffer's debugger location pattern against the line at PT." )) (provide-me "realgud-") + +;; Local Variables: +;; byte-compile-warnings: (not cl-functions) +;; End: diff --git a/packages/realgud/realgud/debugger/gdb/core.el b/packages/realgud/realgud/debugger/gdb/core.el index 22fbed3..5a36a23 100644 --- a/packages/realgud/realgud/debugger/gdb/core.el +++ b/packages/realgud/realgud/debugger/gdb/core.el @@ -17,6 +17,7 @@ (eval-when-compile (require 'cl)) +(require 'files) (require 'load-relative) (require-relative-list '("../../common/track" "../../common/core" @@ -147,15 +148,15 @@ Note that path elements have been expanded via `expand-file-name'. (defvar realgud:gdb-command-name) (defun realgud:gdb-executable (file-name) -"Return a priority for whether file-name is likely we can run gdb on" - (let ((output (shell-command-to-string (format "file %s" file-name)))) + "Return a priority for whether FILE-NAME is likely we can run gdb on" + (let ((output (shell-command-to-string + (format "file %s" (file-chase-links file-name))))) (cond ((string-match "ASCII" output) 2) ((string-match "ELF" output) 7) ((string-match "executable" output) 6) ('t 5)))) - (defun realgud:gdb-suggest-invocation (&optional debugger-name) "Suggest a gdb command invocation. Here is the priority we use: * an executable file with the name of the current buffer stripped of its extension diff --git a/packages/realgud/test/test-regexp-remake.el b/packages/realgud/test/test-regexp-remake.el index 1a3390c..1aa2748 100644 --- a/packages/realgud/test/test-regexp-remake.el +++ b/packages/realgud/test/test-regexp-remake.el @@ -7,6 +7,13 @@ (test-simple-start) +(eval-when-compile + (defvar prompt-pat) (defvar frame-pat) (defvar frame-re) + (defvar loc-pat) (defvar prompt-pat) (defvar test-text) + (defvar file-group) (defvar line-group) (defvar test-pos) + (defvar num-pat) (defvar num-group) (defvar realgud:remake-pat-hash) +) + (set (make-local-variable 'prompt-pat) (gethash "prompt" realgud:remake-pat-hash)) (set (make-local-variable 'frame-pat) @@ -17,7 +24,7 @@ (prompt-match "remake<<1>> " "1" "recursive remake %s") (note "remake debugger-backtrace") -(setq s1 +(setq test-text "=>#0 Makefile.in at /tmp/Makefile:216 #1 Makefile at /tmp/Makefile:230 ") @@ -31,31 +38,31 @@ (set (make-local-variable 'line-group) (realgud-loc-pat-line-group frame-pat)) -(assert-equal 0 (string-match frame-re s1)) -(assert-equal "0" (substring s1 +(assert-equal 0 (string-match frame-re test-text)) +(assert-equal "0" (substring test-text (match-beginning num-group) (match-end num-group))) (assert-equal "/tmp/Makefile" - (substring s1 + (substring test-text (match-beginning file-group) (match-end file-group))) (assert-equal "216" - (substring s1 + (substring test-text (match-beginning line-group) (match-end line-group))) -(set (make-local-variable 'pos) +(set (make-local-variable 'test-pos) (match-end 0)) -(assert-equal 39 (string-match frame-re s1 pos)) -(assert-equal "1" (substring s1 +(assert-equal 39 (string-match frame-re test-text test-pos)) +(assert-equal "1" (substring test-text (match-beginning num-group) (match-end num-group))) (assert-equal "/tmp/Makefile" - (substring s1 + (substring test-text (match-beginning file-group) (match-end file-group))) (assert-equal "230" - (substring s1 + (substring test-text (match-beginning line-group) (match-end line-group)))