Ví dụ,
(defun create-function (number)
`(lambda () (* ,number ,number)))
(defalias 'square-two (create-function 2) "adds two")
(square-two)
Ví dụ,
(defun create-function (number)
`(lambda () (* ,number ,number)))
(defalias 'square-two (create-function 2) "adds two")
(square-two)
Câu trả lời:
Edebug không hỗ trợ mã thiết bị được xây dựng trong thời gian chạy. Nếu bạn cố gắng thực hiện create-function
, thì bước sẽ xảy ra khi bạn đánh giá (create-function 2)
, không phải khi bạn thực hiện square-two
.
Edebug không hỗ trợ các lambda
biểu mẫu thiết bị , vì vậy bạn có thể viết lại ví dụ của mình bằng cách sử dụng ràng buộc từ vựng:
;;; -*- lexical-binding: t -*-
(defun get-lexical-function (number)
(lambda () (* number number)))
(defalias 'square-two (get-lexical-function 2) "adds two")
Sau đó, nếu bạn ghi lại get-lexical-function
trước khi đánh giá defalias
biểu mẫu, bạn có thể thực hiện từng bước lambda
khi đánh giá square-two
.
Đúng.
M-x debug-on-entry RET square-two RET
M-: (square-two) RET
Debugger entered--entering a function:
* square-two()
eval((square-two) nil)
eval-expression((square-two) nil nil 127)
funcall-interactively(eval-expression (square-two) nil nil 127)
call-interactively(eval-expression nil nil)
command-execute(eval-expression)
Sử dụng d
để bước qua chức năng. Sử dụng c
để bỏ qua một bước (bỏ qua bước phụ). Và như mọi khi, C-h m
cho bạn biết thêm về trình gỡ lỗi, bao gồm các khóa khác.
debug
. Nhưng tôi tưởng tượng rằng edebug cũng có thể được sử dụng cho việc này.
edebug
. Tôi đã thử sử dụng edebug-on-entry
để thành công nhỏ.
BTW, trong khi giải pháp của npostavs là lựa chọn tốt hơn cho ví dụ của bạn, trong những trường hợp bạn thực sự cần xây dựng mã theo cách thủ công với backquote (ví dụ bên trong defmacro
), bạn có thể thử:
(defun create-function (number)
(edebug-\` (lambda () (* ,number ,number))))
(invalid-function square-two)
. Thay đổi để (defmacro create-function (number) (edebug-` (* ,number ,number)))
tạo mã làm việc, nhưng tôi vẫn không thể quản lý để bước qua nó.
edebug
, khôngdebug
.