Common Lisp - 我的调试器出了什么问题?
Common Lisp - What's wrong with my debugger?
我正在尝试 运行 此代码:
(defparameter *digits-string* (uiop:read-file-string "day08.txt"))
(defparameter shape '(25 6))
(defun read-file-into-layers (filepath layer-w layer-h)
(with-open-file (stream filepath)
(do ((char (read-char stream) (read-char stream))
(layer-size (* layer-w layer-h))
(layers nil)
(layer nil)
(i nil))
((not (digit-char-p char)) layers)
(when (null layer) (setf layer (make-array layer-size)
i 0))
(setf (aref layer i) (digit-char-p char))
(incf i)
(when (= i layer-size) (progn (push layers layer)
(setf layer nil
i 0))))))
(https://github.com/AlbertoEAF/advent_of_code_2019/blob/d0a331157cbb3f37a16ae92f3cc2c56a35b3e00e/common-lisp/day08.lisp#L14-L28 + day08.txt for https://adventofcode.com/2019/day/8)
返回 nil,不知道为什么(文件包含一行 15k 数字和末尾的换行符)。
我正在尝试调试:
;; 1) Set maximum debug level
(declaim (optimize (speed 0) (space 0) (debug 3)))
;; 2) Recompile the full module + C-u C-c C-c on that function (don't know if that last part is needed)
;; 3) step:
(step (READ-file-into-layers "day08.txt" 25 6))
我仍然几乎看不到任何变量,步进仅停在 (read-char stream)
和 (incf i)
,没有别的吗?而且几乎没有定义变量!
此外,如果我按 "e" 来计算某些表达式,即使有时某些变量没有出现在堆栈跟踪中,在这种情况下它会报告它们根本没有定义。
关于调试器为什么会出现这种奇怪行为的任何想法?或者只是我的代码完全坏了?尽管如此,调试器在这种情况下如果有效的话将是最有帮助的:)
可能是你的编译器太聪明了。当您仔细观察时,由于反转的 push
形式,您只能将 layer
和 layers
设置为 nil
。有一次,layer
变成了 (nil)
,之后又直接恢复为 nil
。如果所有这些 no-ops 都被扔掉了,那么剩下的步骤就不多了。
您可以尝试使用 disassemble
.
反汇编已编译的函数来了解是否属于这种情况
我正在尝试 运行 此代码:
(defparameter *digits-string* (uiop:read-file-string "day08.txt"))
(defparameter shape '(25 6))
(defun read-file-into-layers (filepath layer-w layer-h)
(with-open-file (stream filepath)
(do ((char (read-char stream) (read-char stream))
(layer-size (* layer-w layer-h))
(layers nil)
(layer nil)
(i nil))
((not (digit-char-p char)) layers)
(when (null layer) (setf layer (make-array layer-size)
i 0))
(setf (aref layer i) (digit-char-p char))
(incf i)
(when (= i layer-size) (progn (push layers layer)
(setf layer nil
i 0))))))
(https://github.com/AlbertoEAF/advent_of_code_2019/blob/d0a331157cbb3f37a16ae92f3cc2c56a35b3e00e/common-lisp/day08.lisp#L14-L28 + day08.txt for https://adventofcode.com/2019/day/8)
返回 nil,不知道为什么(文件包含一行 15k 数字和末尾的换行符)。
我正在尝试调试:
;; 1) Set maximum debug level
(declaim (optimize (speed 0) (space 0) (debug 3)))
;; 2) Recompile the full module + C-u C-c C-c on that function (don't know if that last part is needed)
;; 3) step:
(step (READ-file-into-layers "day08.txt" 25 6))
我仍然几乎看不到任何变量,步进仅停在 (read-char stream)
和 (incf i)
,没有别的吗?而且几乎没有定义变量!
此外,如果我按 "e" 来计算某些表达式,即使有时某些变量没有出现在堆栈跟踪中,在这种情况下它会报告它们根本没有定义。
关于调试器为什么会出现这种奇怪行为的任何想法?或者只是我的代码完全坏了?尽管如此,调试器在这种情况下如果有效的话将是最有帮助的:)
可能是你的编译器太聪明了。当您仔细观察时,由于反转的 push
形式,您只能将 layer
和 layers
设置为 nil
。有一次,layer
变成了 (nil)
,之后又直接恢复为 nil
。如果所有这些 no-ops 都被扔掉了,那么剩下的步骤就不多了。
您可以尝试使用 disassemble
.