2012-12-11 193 views
1

上下文:我正在構建一種編程語言(稱爲Lima),我想知道有什麼選項可以讓系統跟蹤堆棧,以便我可以生成正確的堆棧跟蹤(使用正確的行 - 來自原始來源的數字)。請注意,這並不意味着與此相關但有限的問題重複:How do stack traces get generated?堆棧跟蹤如何構建以及堆棧如何跟蹤?

我的根本問題是:程序是否需要更新每行執行之間的行號?

在我看來,這裏的不幸答案是肯定的。

我也想知道我是否可以利用我編譯的堆棧跟蹤環境中的任何東西。現在我正在將語言編譯爲JavaScript(並在Rhino中運行) - 但我正在尋找一個普遍的答案,即它在理論上是否可能以底層環境的方式在這裏以任何方式提供幫助。

如果底層系統支持堆棧跟蹤,您可以從該系統的行號到您的進行靜態映射嗎?

+0

投票結束的人是否想給出一個暗示他們在想什麼? –

回答

0

我的理解是,堆棧的每個子程序調用都會存儲返回地址。生成堆棧跟蹤時,該地址用於符號查找。對於腳本語言,我想你在創建一個子程序的時候必須獲得文件和行號/行位置並將它放在堆棧中。我猜測腳本語言會構造一個散列表來查找這些信息,以保持實際堆棧更緊湊。

+0

所以你對我基本問題的回答是肯定的 - 至少我必須在每個函數調用中添加或刪除一些散列值(指向行號和其他元信息)? –

+0

您的解析步驟之一必須已經生成一個類似的哈希表,因爲它會計算出所有子例程調用的位置? – MattSmith

+0

目前不是。我可能不會構建一個編譯器,如你所知。目前,「編譯器」將該語言翻譯爲JavaScript - 其執行可能會處理您假設我需要的任何哈希表。但是,也許我不是很瞭解你? –