[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/realgud 4548392 100/140: Add alternate breakpoint match
From: |
Rocky Bernstein |
Subject: |
[elpa] externals/realgud 4548392 100/140: Add alternate breakpoint match regexp... |
Date: |
Sat, 25 May 2019 19:35:42 -0400 (EDT) |
branch: externals/realgud
commit 4548392392d0dd9ae24a46de532b9409ebe286a2
Author: rocky <address@hidden>
Commit: rocky <address@hidden>
Add alternate breakpoint match regexp...
allow regexp lists at least for breakpoint adding
---
realgud/common/regexp.el | 7 ++-
realgud/common/track.el | 36 +++++++++------
realgud/debugger/gdb/init.el | 21 ++++++---
test/regexp-helper.el | 17 +++++--
test/test-loc-regexp-gdb.el | 106 +++++++++++++++++++++++++++++++++++++++++++
5 files changed, 162 insertions(+), 25 deletions(-)
diff --git a/realgud/common/regexp.el b/realgud/common/regexp.el
index e21de25..4cdbbff 100644
--- a/realgud/common/regexp.el
+++ b/realgud/common/regexp.el
@@ -42,9 +42,13 @@ output by a debugger inside a process shell"
(regexp) ;; a stack position, or thread number.
(file-group) ;; Filename position in struct
(line-group) ;; Line number position in struct
+
+ ;; FIXME: fix code to handle lists of locs and then remove
(alt-file-group) ;; Used when regexp is too complicated and use \|
;; e.g. perldb file loc regexps
(alt-line-group) ;; ditto
+
+
(char-offset-group) ;; Character offset position in struct
(instruction-address-group)
(column-group)
@@ -53,7 +57,8 @@ output by a debugger inside a process shell"
(text-group) ;; Some source text that should found at position
(class-group) ;; Java doesn't refer to files, but class names
(event-group) ;; Stopping event, e.g.statement, breakpoint,
- ;; call, return, exception, etc.
+ ;; call, return, exception, etc.
+ (function-group) ;; function name
)
(defconst realgud:regexp-captured-num "\\([0-9]+\\)")
diff --git a/realgud/common/track.el b/realgud/common/track.el
index a0de3f1..db808ff 100644
--- a/realgud/common/track.el
+++ b/realgud/common/track.el
@@ -507,9 +507,15 @@ Otherwise return nil. CMD-MARK is set in the realgud-loc
object created.
(with-current-buffer cmdbuf
(unless (realgud:track-complain-if-not-in-cmd-buffer cmdbuf t)
(let* ((loc-pat (realgud-cmdbuf-pat "brkpt-set"))
- (shortkey-mode? (realgud-sget 'cmdbuf-info 'src-shortkey?)))
- (if loc-pat
- (let ((bp-num-group (realgud-loc-pat-num loc-pat))
+ (shortkey-mode? (realgud-sget 'cmdbuf-info 'src-shortkey?))
+ (found-loc nil)
+ (loc-pat-list loc-pat))
+ (unless (listp loc-pat-list)
+ (setq loc-pat-list (list loc-pat)))
+ (while loc-pat-list
+ (setq loc-pat (car loc-pat-list))
+ (setq loc-pat-list (cdr loc-pat-list))
+ (let ((bp-num-group (realgud-loc-pat-num loc-pat))
(loc-regexp (realgud-loc-pat-regexp loc-pat))
(file-group (realgud-loc-pat-file-group loc-pat))
(line-group (realgud-loc-pat-line-group loc-pat))
@@ -527,9 +533,10 @@ Otherwise return nil. CMD-MARK is set in the realgud-loc
object created.
(lineno (string-to-number (or line-str "1")))
)
(cond (callback-loc-fn
- (funcall callback-loc-fn text
- filename lineno source-str
- ignore-re-file-list cmd-mark))
+ (setq found-func (funcall callback-loc-fn text
+ filename lineno
source-str
+ ignore-re-file-list
cmd-mark))
+ (setq loc-pat-list nil))
('t
(unless line-str
@@ -551,7 +558,8 @@ Otherwise return nil. CMD-MARK is set in the realgud-loc
object created.
(progn
(message loc-or-error)
;; set to return nil
- nil)
+ (setq found-loc nil)
+ (setq loc-pat-list nil))
;; else
(let ((loc loc-or-error)
(bp-list (realgud-sget
'cmdbuf-info 'bp-list)))
@@ -573,13 +581,13 @@ Otherwise return nil. CMD-MARK is set in the realgud-loc
object created.
(realgud-cmdbuf-info-bp-list= (cons
loc bp-list)))
;; Set to return location
- loc-or-error))))
- nil))))
- nil))
- nil))
- )
- )
- )
+ (setq found-loc loc-or-error)
+ (setq loc-pat-list nil))
+ )))
+ )))
+ ))))
+ found-loc)
+ )))
(defun realgud-track-bp-delete(text &optional cmd-mark cmdbuf
ignore-re-file-list)
"Do regular-expression matching to see if a breakpoint has been
diff --git a/realgud/debugger/gdb/init.el b/realgud/debugger/gdb/init.el
index e2c4a80..0667aa2 100644
--- a/realgud/debugger/gdb/init.el
+++ b/realgud/debugger/gdb/init.el
@@ -59,12 +59,21 @@ realgud-loc-pat struct")
;; For example:
;; Breakpoint 1, main (argc=1, argv=0x7fffffffdbd8) at main.c:24
(setf (gethash "brkpt-set" realgud:gdb-pat-hash)
- (make-realgud-loc-pat
- :regexp (format "^Breakpoint %s at 0x\\([0-9a-f]*\\): file \\(.+\\),
line %s.\n"
- realgud:regexp-captured-num realgud:regexp-captured-num)
- :num 1
- :file-group 3
- :line-group 4))
+ (list
+ (make-realgud-loc-pat
+ :regexp (format "^Breakpoint %s at 0x\\([0-9a-f]*\\): file \\(.+\\),
line %s[.]\n"
+ realgud:regexp-captured-num realgud:regexp-captured-num)
+ :num 1
+ :file-group 3
+ :line-group 4)
+ ;; Another breakpoint pattern seen
+ (make-realgud-loc-pat
+ :regexp (format "^Breakpoint %s, .* at \\(.+\\):%s[.]\n"
+ realgud:regexp-captured-num realgud:regexp-captured-num)
+ :num 1
+ :file-group 2
+ :line-group 3)
+ ))
;; Regular expression that describes a debugger "delete" (breakpoint)
;; response.
diff --git a/test/regexp-helper.el b/test/regexp-helper.el
index 01dc7d2..76b18f0 100644
--- a/test/regexp-helper.el
+++ b/test/regexp-helper.el
@@ -19,10 +19,19 @@
(setq helper-tb (gethash "lang-backtrace" pat-hash))
)
-(defun loc-match(text var)
- "Match TEXT against regexp field VAR"
- (string-match (realgud-loc-pat-regexp var) text)
-)
+(defun loc-match(text regexp-list)
+ "Match TEXT against regexp field REGEXP"
+ (let ((regexp)
+ (ret-val nil))
+ (unless (listp regexp-list)
+ (setq regexp-list (list regexp-list)))
+ (while regexp-list
+ (setq regexp (car regexp-list))
+ (setq regexp-list (cdr regexp-list))
+ (when (setq ret-val (string-match (realgud-loc-pat-regexp regexp) text))
+ (setq regexp-list nil)))
+ ret-val
+ ))
(defun bp-loc-match(text)
(string-match (realgud-loc-pat-regexp helper-bps) text)
diff --git a/test/test-loc-regexp-gdb.el b/test/test-loc-regexp-gdb.el
new file mode 100644
index 0000000..abde2a5
--- /dev/null
+++ b/test/test-loc-regexp-gdb.el
@@ -0,0 +1,106 @@
+;; Press C-x C-e at the end of the next line to run this file test
non-interactively
+;; (test-simple-run "emacs -batch -L %s -l %s" (file-name-directory
(locate-library "test-simple.elc")) buffer-file-name)
+
+(require 'test-simple)
+(require 'load-relative)
+(load-file "./regexp-helper.el")
+(load-file "../realgud/common/regexp.el")
+(load-file "../realgud/debugger/gdb/init.el")
+
+(declare-function realgud-cmdbuf-info-loc-regexp 'realgud-buffer-command)
+(declare-function cmdbuf-loc-match 'realgud-regexp)
+(declare-function realgud-loc-pat-regexp 'realgud-regexp)
+(declare-function realgud-loc-pat-file-group 'realgud-regexp)
+(declare-function realgud-loc-pat-line-group 'realgud-regexp)
+(declare-function realgud-cmdbuf-info-file-group 'realgud-regexp)
+(declare-function realgud-cmdbuf-info-line-group 'realgud-regexp)
+(declare-function realgud-cmdbuf-info 'realgud-regexp)
+(declare-function make-realgud-cmdbuf-info 'realgud-regexp)
+(declare-function __FILE__ 'load-relative)
+
+(test-simple-start)
+
+(eval-when-compile
+ (defvar dbg-name)
+ (defvar realgud-pat-hash)
+ (defvar helper-bps)
+ (defvar loc-pat)
+ (defvar prompt-pat)
+ (defvar realgud:gdb-pat-hash)
+ (defvar test-dbgr)
+ (defvar test-s1)
+ (defvar test-text)
+)
+
+(note "prompt matching")
+
+(set (make-local-variable 'prompt-pat)
+ (gethash "prompt" realgud:gdb-pat-hash))
+
+(prompt-match "(gdb) ")
+
+(setup-regexp-vars realgud:gdb-pat-hash)
+
+;; Some setup usually done in setting up the buffer.
+;; We customize this for the debugger trepan. Others may follow.
+;; FIXME: encapsulate this.
+(setq dbg-name "gdb")
+(setq loc-pat (gethash "loc" (gethash dbg-name realgud-pat-hash)))
+
+(setq test-dbgr (make-realgud-cmdbuf-info
+ :debugger-name dbg-name
+ :loc-regexp (realgud-loc-pat-regexp loc-pat)
+ :file-group (realgud-loc-pat-file-group loc-pat)
+ :line-group (realgud-loc-pat-line-group loc-pat)))
+
+
+(setq test-text "/tmp/Porosity.cpp:229:8538:beg:0x555555588d48")
+(assert-t (numberp (cmdbuf-loc-match test-text test-dbgr)) "basic location")
+
+(note "extract file name")
+(assert-equal 0 (cmdbuf-loc-match test-text test-dbgr))
+(assert-equal "/tmp/Porosity.cpp"
+ (match-string (realgud-cmdbuf-info-file-group test-dbgr)
+ test-text))
+
+(assert-equal "229"
+ (match-string
+ (realgud-cmdbuf-info-line-group test-dbgr)
+ test-text) "extract line number")
+
+(note "breakpoint location matching")
+
+(setq test-s1
+ "Breakpoint 4 at 0x34cc3: file Porosity.cpp, line 226.\n")
+
+(assert-t (numberp (loc-match test-s1 helper-bps))
+ "basic breakpoint location")
+(assert-equal "4"
+ (match-string (realgud-loc-pat-num (car helper-bps))
+ test-s1) "extract breakpoint number")
+(assert-equal "Porosity.cpp"
+ (match-string (realgud-loc-pat-file-group (car helper-bps))
+ test-s1) "extract breakpoint file name")
+(assert-equal "226"
+ (match-string (realgud-loc-pat-line-group (car helper-bps))
+ test-s1)
+ "extract breakpoint line number")
+
+
+(setq test-s1
+ "Breakpoint 10, main (argc=3, argv=0x7fffffffe738) at
Porosity2.cpp:22.\n")
+
+(assert-t (numberp (loc-match test-s1 helper-bps))
+ "basic breakpoint location")
+
+(assert-equal "10"
+ (match-string 1 test-s1) "extract breakpoint number")
+
+(assert-equal "Porosity2.cpp"
+ (match-string 2 test-s1) "extract breakpoint file name")
+(assert-equal "22"
+ (match-string 3 test-s1)
+ "extract breakpoint line number")
+
+
+(end-tests)
- [elpa] externals/realgud 4cb19e3 127/140: Remove some emacs compile warnings, (continued)
- [elpa] externals/realgud 4cb19e3 127/140: Remove some emacs compile warnings, Rocky Bernstein, 2019/05/25
- [elpa] externals/realgud bab9fb9 105/140: DRY a js regexp by hoisting it to lang/js.el, Rocky Bernstein, 2019/05/25
- [elpa] externals/realgud a293690 107/140: configure.ac: Fix NO_CHECK_EMACS_PACKAGES elisp., Rocky Bernstein, 2019/05/25
- [elpa] externals/realgud 814aebb 117/140: Make sure to autoload attach functions, Rocky Bernstein, 2019/05/25
- [elpa] externals/realgud 21e5a58 116/140: Merge pull request #242 from alyssais/patch-1, Rocky Bernstein, 2019/05/25
- [elpa] externals/realgud 917a46f 138/140: Add realgud:file-remove-ignore to remove a previously ignored entry., Rocky Bernstein, 2019/05/25
- [elpa] externals/realgud d8afc89 135/140: Merge pull request #241 from beyondpie/pdb_pr_szu, Rocky Bernstein, 2019/05/25
- [elpa] externals/realgud 9a9f6dc 132/140: Add 'B' key to get list of breakpoints, Rocky Bernstein, 2019/05/25
- [elpa] externals/realgud 36782d6 108/140: Merge pull request #226 from Apteryks/master, Rocky Bernstein, 2019/05/25
- [elpa] externals/realgud 296a802 106/140: Hoist syntax-checking kbd command, Rocky Bernstein, 2019/05/25
- [elpa] externals/realgud 4548392 100/140: Add alternate breakpoint match regexp...,
Rocky Bernstein <=
- [elpa] externals/realgud dd8909a 110/140: add key 'h' for cmd-until-here: continue until the current line, Rocky Bernstein, 2019/05/25
- [elpa] externals/realgud cf993af 114/140: change pdb to python -m pdb., Rocky Bernstein, 2019/05/25
- [elpa] externals/realgud 565ac78 112/140: Adjust for v8 tracebacks inside a debugger console, Rocky Bernstein, 2019/05/25
- [elpa] externals/realgud 2ae8fbf 111/140: Merge pull request #230 from cranechu/master, Rocky Bernstein, 2019/05/25
- [elpa] externals/realgud fa2d601 120/140: cl-seq -> cl-lib, Rocky Bernstein, 2019/05/25
- [elpa] externals/realgud 5631fa2 115/140: Fix wiki links in README, Rocky Bernstein, 2019/05/25
- [elpa] externals/realgud a6783f5 129/140: Add breakpoint buffer tracking to source window, Rocky Bernstein, 2019/05/25
- [elpa] externals/realgud 3630fef 121/140: keep history in attaching command-buffers ..., Rocky Bernstein, 2019/05/25
- [elpa] externals/realgud 2a46513 134/140: Some small tweaks, Rocky Bernstein, 2019/05/25
- [elpa] externals/realgud 2987c80 136/140: Compile linting, Rocky Bernstein, 2019/05/25