summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFabián Ezequiel Gallina <fgallina@gnu.org>2013-01-30 12:02:58 -0300
committerFabián Ezequiel Gallina <fgallina@gnu.org>2013-01-30 12:02:58 -0300
commit6ff930c3d206417e4cec9429fa5d71bb5c9af541 (patch)
tree1f2c36d23a4948f1bdda2266130c1fc955581ce5
parentfe93f41aa0f701315884bf0f8d2cbc6a9f914209 (diff)
downloademacs-6ff930c3d206417e4cec9429fa5d71bb5c9af541.tar.gz
* progmodes/python.el
(python-pdbtrack-comint-output-filter-function): Enhancements on stacktrace detection. (thanks @gnovak)
-rw-r--r--lisp/ChangeLog6
-rw-r--r--lisp/progmodes/python.el20
2 files changed, 17 insertions, 9 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 41c5c7d1671..bd8f5c08274 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,9 @@
+2013-01-30 Fabián Ezequiel Gallina <fgallina@cuca>
+
+ * progmodes/python.el
+ (python-pdbtrack-comint-output-filter-function): Enhancements on
+ stacktrace detection. (thanks @gnovak)
+
2013-01-30 Glenn Morris <rgm@gnu.org>
* imenu.el (imenu-default-create-index-function):
diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el
index 71c5ba57fa0..2a7a3765ac2 100644
--- a/lisp/progmodes/python.el
+++ b/lisp/progmodes/python.el
@@ -2317,15 +2317,17 @@ Argument OUTPUT is a string with the output from the comint process."
(file-name
(with-temp-buffer
(insert full-output)
- (goto-char (point-min))
- ;; OK, this sucked but now it became a cool hack. The
- ;; stacktrace information normally is on the first line
- ;; but in some cases (like when doing a step-in) it is
- ;; on the second.
- (when (or (looking-at python-pdbtrack-stacktrace-info-regexp)
- (and
- (forward-line)
- (looking-at python-pdbtrack-stacktrace-info-regexp)))
+ ;; When the debugger encounters a pdb.set_trace()
+ ;; command, it prints a single stack frame. Sometimes
+ ;; it prints a bit of extra information about the
+ ;; arguments of the present function. When ipdb
+ ;; encounters an exception, it prints the _entire_ stack
+ ;; trace. To handle all of these cases, we want to find
+ ;; the _last_ stack frame printed in the most recent
+ ;; batch of output, then jump to the corrsponding
+ ;; file/line number.
+ (goto-char (point-max))
+ (when (re-search-backward python-pdbtrack-stacktrace-info-regexp nil t)
(setq line-number (string-to-number
(match-string-no-properties 2)))
(match-string-no-properties 1)))))