What should you do when things go awry with your scripting?What should you do when things go awry with your scripting?What should you do when things go awry with your scripting?What should you do when things go awry with your scripting?當你的腳本出現問題時你該做什麼?歡迎回來!
如果您剛加入我們,那麼您就已經加入了旨在讓人們開始使用 JMP 腳本語言的系列。 與先前的條目不同該系列,您可能不需要閱讀其他條目才能理解這一條目,但如果您想一起玩並完成其他條目的作業,請參閱以下鏈接
另外,非常感謝克里斯蒂安·斯托普( @克里斯蒂安斯托普)建議該系列中的此條目。
該系列的這一部分在很大程度上是一個獨立的條目。 但是,在事情的發展過程中,這可能是您開始使用某些程式碼並可能看到一兩個錯誤訊息的時刻。 因此,在我們開始任何嚴肅的程式碼爭論之前,讓我們先介紹一下當事情出現問題時該怎麼辦。
JSL 中最常見的錯誤
賈斯汀·奇爾頓( @Justin_Chilton )和溫蒂·墨菲( @Wendy_Murphrey )是最好的腳本編寫者之一聯合管理計劃。 在 2020 年美洲 JMP Discovery 高峰會上,他們(虛擬)提交了一篇題為「最常見的 JSL 錯誤以及如何避免它們」的論文。可以找到該簡報的 PowerPoint 文件這裡關於社區。
對於新編劇來說,這是一本 14 頁的純金書。 在本系列中我們所做的事情中,其中一些內容有點超出了範圍,但對於您腳本編寫之旅的後續步驟來說將非常寶貴。 幫我做一個紮實的工作,下載 pdf 文件,把它放在一個你不會忘記的地方,然後在社區頁面上給這篇論文點讚。
Mike 最常見的 JSL 錯誤
作為對賈斯汀和溫蒂工作的一點重複,我想在他們的清單中添加一些內容。 這些都是非常基本的,通常會導致腳本在運行之前崩潰(這就是為什麼它們沒有出現在探索峰會論文中)。
膠水
缺少 Glue Operators 可能是 JSL 最常見的錯誤。 正如我之前提到的,Glue 運算子是您在 JSL 中每條指令末尾看到的分號 (“;”)。 如果您使用紅色小三角選單將腳本儲存到腳本視窗(請參閱上一篇文章),JMP 將在需要的地方添加膠水。 如果您手動編寫程式碼,可以使用一個技巧來確保您沒有忘記某個地方。 在腳本編輯器中右鍵單擊並選擇重新格式化腳本。

這個技巧實際上會捕捉腳本中許多與基本語法相關的錯誤。 當您在腳本編輯器中時,還有一個鍵盤快捷鍵(但它在“腳本編輯器框”中不起作用)。 我自己比較喜歡鍵盤快捷鍵。 對於 Windows 來說,它是CTRL+M 。 對 MacOS 來說是指令+M 。
現在,在我向您展示如何解壓縮出現錯誤時重新格式化腳本告訴您的內容之前,讓我先展示另一個讓我抓狂的錯誤。 由於它們都使用類似的調試工作流程,我保證這很快就會有意義。
括號
將括號(方括號、大括號等)放錯位置(或遺失)可能是需要追蹤的最隱密的錯誤。 我的意思是它是一個特別的有點令人沮喪。 JMP 中有一個工具可以幫助您追蹤不匹配的括號對。 當您將遊標放在括號外部時,腳本編輯器將以藍色突出顯示它(以及它認為匹配的內容)。

如果腳本編輯器感到困惑,或找不到匹配項,它將以紅色突出顯示括號。

因此,如果括號的藍色匹配不是您期望的位置,或者括號以紅色突出顯示,則您可能遇到了問題。
當您因缺少括號而出現錯誤時,您可能會想要繼續將它們添加到末尾,直到錯誤消失。 我只想說這是一個壞主意,然後繼續針對這個問題和缺少膠水的問題採取一些更好的策略。 它們都圍繞著設定 JMP 的腳本編輯器。
設定(和使用)腳本編輯器以取得成功
JMP 腳本編輯器(我們在上一篇文章)具有許多使程式碼處理和調試變得更容易的功能。 我的偏好設定中預設啟用了這些,我建議您也這樣做。 若要存取 JMP 首選項對話框,請選擇優先從 JMP 選單 (MacOS) 或檔案選單 (PC)。

我在螢幕截圖中突出顯示了我認為真正有用的選項。 程式碼折疊對於較大的腳本非常有用。 行號和自動完成選項對於我們目前的討論更為重要。
如何使用日誌
現在我們已經設定了腳本編輯器,讓我們學習如何使用日誌。 首先,要打開日誌,請前往查看 > 日誌(視窗 > 日誌在 Mac 上)。 這將打開一個類似於腳本編輯器的視窗。 它與腳本編輯器的不同之處在於它顯示輸出命令的結果和結果在腳本編輯器中運行。 如果您希望將輸入和輸出保留在同一視窗中,則可以透過在腳本編輯器中右鍵單擊並選擇來開啟腳本編輯器中的嵌入式日誌顯示嵌入日誌。

讓我們看看使用這個腳本是如何運作的:

腳本非常簡單。 除了第 2 行和註解之外,它是使用以下命令建立的儲存腳本...到腳本視窗。 如果我跑重新格式化腳本(也可以透過在腳本視窗中右鍵單擊找到),我收到以下錯誤訊息:

在日誌中,您會得到類似的內容:

在灰色區域中,您可以看到輸入的內容。 在其下方,您會看到一條有關意外情況的訊息以及有關可能出現問題的建議。 在這種情況下,JMP 認為缺少黏合 (;)。 它還透過行號告訴您腳本中意外輸入的位置。 由於 JSL 是按順序運行的(從上到下),這意味著錯誤位於第 5 行上方的某個位置。 因為我們已經打開了行號,所以我們可以看到第 2 行缺少 Glue Operator,這意味著 JMP 並不期望新命令從第 5 行開始,因此感到驚訝。 在第 2 行末尾加上分號後,執行重新格式化腳本不應回傳任何錯誤。
同樣,如果我們缺少括號對的一部分(例如圓括號),如下所示(注意第 7 行):

我們會收到以下錯誤訊息:

帶有日誌訊息:

來自 JMP 的這些訊息不太明確,但以下是如何解釋它們的方法。 首先,從錯誤訊息我們知道問題出在Distribution。 在日誌和錯誤訊息之間,很可能某個地方缺少括號。 日誌顯示第 11 行發生了意外情況(「Column ...」有時會有所幫助,但您必須計算字元數才能使用它)。 反白括號的顏色表示第一個括號遺失了(請注意,將遊標置於左側後,第 5 行中「分佈」旁的括號上的紅色)。

繼續使用突出顯示來找出缺少的位置(在本例中為第 7 行)。 在大多數情況下,日誌是了解 JMP 認為正在發生的情況的一個非常有用的視窗。 但是,如果您想檢查 JSL 是否有錯誤或逐步完成程式碼,可以使用另一個工具。
如何使用 JSL 偵錯工具
JSL 偵錯器有點奇怪。 如果您不小心按下了偵錯器按鈕:

您可能已經知道它在運行時會鎖定 JMP 中的主介面。 當我開始編寫腳本時,我確實沒有經常使用它。 現在我已經與開發團隊就此進行了幾次交談,我可以說我正在接受它。 讓我們來談談它以及它可以做什麼。
首先,關於鎖定 JMP 的一點。 這有點令人困惑,但它實際上所做的是創建 JMP 的第二個實例來運行偵錯。 只要 JSL 偵錯器處於活動狀態,JMP 的主實例就不會回應。 如果關閉 JSL 偵錯器,您將重新獲得控制權。
當您啟動 JSL 偵錯器時,除了另一個 JMP 實例之外,您還會獲得 JSL 偵錯器視窗。 此視窗包含您的程式碼、不同變數的清單、日誌和其他資訊。 它看起來像這樣:

當您進行偵錯時,此視窗是您了解腳本在 JMP 中執行的操作的眼睛和耳朵。 如果您有第二個螢幕,請將其移到那裡,以便您始終可以看到它(有時它可能會被埋在其他視窗後面)。
現在,我可以瘋狂地描述您可以使用 JSL 偵錯器執行的所有操作,但是文件中有一個很棒的章節(帶有範例!),您可以找到這裡。
還有一個不錯的梅蘭妮德雷克 (Melanie Drake) 的部落格文章( @Melanie_J_Drake ),其中介紹了您可以使用 JSL 偵錯器執行的一些很酷的操作。 因此,如果您想深入了解一下,請看一下這些內容。 出於我們的目的,我希望您注意這些按鈕:

前兩個運行腳本。 第一個將腳本運行到其末尾或遇到斷點的位置(如果您不想運行整個腳本,則需要停止評估的點)。 您可以透過右鍵單擊 JSL 偵錯器中的行號旁邊來在程式碼中設定斷點。 該行旁邊將出現一個紅點(斷點需要位於程式碼行上,而不是註解上!)。

如果您要使用第一個執行此腳本跑步按鈕,它將運行到第 10 行,然後停止。 第二次按下跑步按鈕將完成腳本。 第二跑步按鈕運行整個腳本而不關注斷點。 這紅色停止按鈕退出偵錯器,如果您意外開啟它或已完成偵錯會話,這會很有用。 這重複按鈕重設所有內容以再次執行腳本(例如,如果您想更改斷點所在位置,然後重新執行程式碼)。
家庭作業
這週的作業很輕鬆。 我希望您設定腳本編輯器,找到日誌,並使用文件中的一些範例腳本開始使用 JSL 偵錯器。 查看偵錯器視窗左下角的標籤中彈出哪些變數。 另外,找到紀錄右下角的選項卡(這樣你就知道它在哪裡)。
下週,我們將討論我們將要介紹的「編碼」的最後一部分這個系列。
當我嘗試啟動調試器時,JMP 立即崩潰到桌面。 2021 年在 Windows 10 上全新安裝 JMP 14 pro。 這是一個公司係統,所以我想可能有一些連接埠的東西......但我的 pycharm IDE 沒有這個問題,所以我對 JMP 感到沮喪