2010-07-15 111 views
8

During web searching,我發現了以下評論:傳統的Lisp調試的做法仍然可以使用。Lisp代碼調試

  • 什麼是傳統的調試做法?
  • 通常,使用什麼工具來調試lisp(帶/不帶emacs)?
+5

@ rlb.usa我不知道什麼是「玩具語言」,但Lisp已被美國陸軍用於多個後勤計劃系統,已部署到航天器控制(甚至遠程調試),在幾個AI和AI相關係統中,以及ITA Software後面,搜索enginge廉價航班,剛剛通過谷歌購買7億美元。 – 2010-07-15 22:21:33

+0

SLIME是在Emacs上運行的CL的__awesome__開發環境。我從來沒有使用任何其他REPL的CL。 – Jyaan 2010-07-26 06:54:22

回答

4

我不知道是什麼比爾具體意思,但IME:

通常你的編輯器將連接到它的運行實例。您可以立即編譯函數以將它們插入正在運行的映像中 - 因爲Lisp有它自己的編譯器,所以您只是告訴正在運行的映像來讀取和編譯一小段文本。或者你可以直接運行函數,看看他們做了什麼。

當引發異常(或條件發出信號時,如果您足夠幸運,可以用條件方言),調試器會向您顯示堆棧跟蹤並讓您決定如何繼續。

Lisp和其他高級編譯語言之間的主要區別是在Lisp中你基本上總是寫附帶調試代碼。

0

基本上只是像添加代碼一樣打印出值,因爲它運行,所以你可以看到發生了什麼。

+0

聲音lika一個C#程序員..(這是一種恭維) – Flinkman 2010-07-15 19:04:15

3

運行edebug-defun函數在Emacs,你會看到,Lisp是神奇的。

4

由於clojure標籤在問題中,我會給我們的觀點。由Clojure的編譯器生成

類文件包括線路和基於方法的調試信息,所以任何Java調試器將直接與Clojure的代碼,包括斷點和對象檢查互操作。

如果你使用emacs /泥作爲開發環境,與煤泥的調試器集成最近被列入。由於文檔有點稀疏,最好直接在github上查看支持範圍。

2

在一些我稱之爲接近「傳統組Lisp的調試技術」是:

  • 調試打印輸出
  • 功能跟蹤(一個跟蹤函數 的每個調用被印刷有凹口對應調用深度,返回 值打印)。圖像內調試器
  • 在圖像內調試器結束了的由錯誤引起的
  • 顯式調用(嘗試添加一個整數和一個符號,例如)