IRONSOFTWAREHOME

格式化例外顯示 - Spectre Console 系列

例外格式顯示 - Spectre Console 系列

Tim Corey

8m 51s

當構建 .NET 控制台應用程式時,您通常需要以對開發者和使用者皆合理的方式處理例外。 純控制台輸出可能會使例外看起來像是長長的、難以閱讀的資料串——尤其是在處理堆疊追蹤和重度反射的程式庫時。 在他的影片"例外格式顯示 - Spectre Console 系列"中,Tim Corey 帶我們了解如何使用 Spectre.Console 程式庫來使例外更容易閱讀、剖析和理解。

在本文中,我們將探討 Tim 如何處理例外,使用 Spectre.Console 的命令和方法,並應用不同的設定和樣式於例外顯示。

引言:為什麼需要格式化例外?

在影片的開頭,Tim Corey 介紹了 Spectre.Console,將其描述為一個幫助開發者將其純控制台應用程式轉變為"視覺吸引且內容豐富的應用程式"的程式庫。在這堂課中,他專注於如何以更清晰和可讀的方式處理例外。

Tim 解釋說,預設情況下,當例外在控制台應用程式中被拋出時,您從 Console.WriteLine(ex) 獲得的輸出只是一堵文字牆。 它包括路徑、堆疊追蹤和型別名稱——所有這些都是連續的字串。 功能上是可行的,但不友好。

為了演示,Tim 建立了一個小範例:

try
{
    throw new Exception("You forgot to give me the data.");
}
catch (Exception ex)
{
    Console.WriteLine(ex);
}

他在終端中運行此命令,預料之中,輸出很混亂。 所有東西都混在一起。 Tim 指出,很難指出重要的部分——訊息、方法,或是文件位置。 因此,他著手使用 Spectre.Console 的例外格式來解決這個問題。

使用 AnsiConsole.WriteException – 第一個步驟

為了改善顯示,Tim 替換了這行:

Console.WriteLine(ex);

用 Spectre 的命令:

AnsiConsole.WriteException(ex);

這個單一的方法呼叫改變了一切。

當他再次運行應用程式時,終端的輸出現在已著色。 訊息顯示得很清楚,而堆疊追蹤部分也被不同樣式化。 文字更易於解析,重點數值脫穎而出。

Tim 指出,AnsiConsole 類在 Spectre.Console 中作為渲染樣式輸出的重要入口。 WriteException() 方法專門設計來處理例外並自動為您格式化。

他說,"這已經是一個進步。" 控制台現在突顯了訊息、文件路徑和方法名稱,使其更易於一目了然地閱讀。

通過 ExceptionFormats 新增格式選項

展示了基本範例後,Tim 更進一步,新增格式參數來控制顯範例外的哪些部分以及如何縮短它們。

他介紹了 ExceptionFormats 枚舉,它提供了多個選項,如 ShortenPaths、ShortenTypes、ShortenMethods 和 ShowLinks。 您可以單獨使用這些選項或使用管道符 (|) 字元結合它們。

Tim 編寫了以下程式碼:

AnsiConsole.WriteException(ex, ExceptionFormats.ShortenEverything);

當他運行此命令時,控制台輸出變得更短、更精簡。

他解釋道:

  • 路徑被縮短 - 不顯示完整目錄路徑,只顯示文件名如 Program.cs。

  • 型別被縮短 - 不顯示如 System.IO.InvalidDataException,而是僅顯示 InvalidDataException。

  • 方法被縮短 - 長泛型方法名稱被修剪以便於理解。

該範例顯示了 Spectre.Console 的例外格式選項如何在不丟失基本資訊的情況下使結果更加緊湊。

Tim 強調說,第一個版本(完整路徑和命名空間)包含"主要是噪音",而此格式版本更有意義,當您只是快速想看到問題來源時。

結合多種格式以獲得更多控制

Tim 並未止步於此。 他演示了如何使用管道運算符結合多種格式設置:

AnsiConsole.WriteException(ex, ExceptionFormats.ShortenEverything | ExceptionFormats.ShowLinks);

3:54,Tim 解釋了 ShowLinks 選項。 這允許 Spectre.Console 在相容的終端中渲染可點擊或可懸停的文件連結。 在他的範例中,文件名 Program.cs 現在有下劃線顯示。 當他懸停在其上,終端會顯示包含完整文件路徑的工具提示。

他指出,這種行為取決於您的環境——它在支持可點擊連結的終端(如某些 bash 或 VS Code 終端)中效果更好。

通過結合格式,您可以確定您的例外輸出應該顯示多少資訊——可能您需要縮短的路徑但保留完整型別名稱,或者完全隱藏方法細節。 Spectre.Console 提供了這種靈活性。

深入了解 ExceptionSettings

在這一點上,Tim 引入了一個新的物件稱為 ExceptionSettings。 這讓您可以以更進階的方式同時自訂例外的格式化和樣式。

他解釋說,與其傳遞單一的格式值,不如傳遞整個設定的物件:

var settings = new ExceptionSettings
{
    Format = ExceptionFormats.ShortenEverything,
    Style = new ExceptionStyle
    {
        Message = new Style(foreground: Color.Red, decoration: Decoration.SlowBlink)
    }
};
AnsiConsole.WriteException(ex, settings);

此處,Tim 配置了兩個屬性:

  • 格式 – 指定如何縮短例外資訊。

  • 樣式 – 定義不同的例外元素(如方法名稱、路徑或訊息)的外觀應如何。

Spectre.Console 提供了豐富的樣式選項,如前景色、背景色和裝飾(如下劃線、閃爍、粗體等)。

Tim 指出,您還可以設置例外顯示的其他部分的樣式,例如參數名稱、方法呼叫或括號——不僅僅是訊息。 這使您可以非常細緻地控制您的例外輸出在 CLI 中的外觀。

設置例外訊息的樣式

為了展示樣式如何實際應用,Tim 將樣式專門應用於例外的訊息部分。 他將訊息顏色設置為紅色並加入緩慢閃爍效果,使其更加突出:

Message = new Style(foreground: Color.Red, decoration: Decoration.SlowBlink)

當他運行應用程式時,訊息"嘿,你忘了給我資料了。" 現在在終端窗口中以紅色閃爍。

Tim 指出,這有助於突顯例外輸出中最重要的資訊——即訊息本身。 其餘的文字(如文件名和行數)仍在下方可用,但您的視線立即被吸引到錯誤的地方。

他解釋道,"這真的將您的注意力吸引到最重要的事情上,就是訊息本身。 然後他們可以發現,哦,這是在 Program.cs 的 main 內的第 256 行。"

這表明 Spectre.Console 不僅使資料可讀,還增加了強調和視覺層次,幫助您更快解釋結果。

總結 Spectre Console 系列

隨著影片結束,Tim 提到這是他的 Spectre.Console 系列的最後一部分——至少目前是這樣。 他鼓勵觀眾在 suggestions.iamtimcorey.com 提出反饋或更多主題的建議。

他指出,在整個系列中,他們已經覆蓋了多種 Spectre 功能:渲染表格、處理 CLI 命令和參數、處理結構化文字,現在發展到格式化例外。

Tim 結尾時說這堂課給了開發者工具,讓他們能夠以清晰且具有視覺回饋的方式優雅地處理例外——這一切都在一個簡單的 .NET 控制台應用程式內完美實現。

最後的想法

藉由這次走訪,Tim Corey 清楚地展示了如何使 Spectre.Console 的例外更可讀、資訊量更大且視覺吸引。 只需幾行程式碼,開發者可以:

  • 更有效地處理例外。

  • 通過縮短路徑和更清晰的文字格式化控制台輸出。

  • 使用 ExceptionSettings 物件來微調格式和樣式。

  • 新增顏色和裝飾以突顯重要資訊。

  • 將文件路徑顯示為可點擊或可懸停的連結。

這種方法不僅改善了除錯,還使基於 CLI 的應用程式看起來精緻且專業。 藉由結合強大的方法如 AnsiConsole.WriteException()、可自訂的設置和豐富的樣式選項,開發者可以構建 .NET 控制台應用程式,提供有意義且結構良好的例外輸出,易於解析和理解——正如 Tim Corey 在他的精彩範例中所展示的。

Earn More by Sharing What You Love

Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!

Let's Stay in Touch!

Join our newsletter, you’ll get exclusive access on article updates. We value your privacy

Key in blue circle

立即免費取得 30 天試用金鑰

Your trial license will be sent to your email address

無任何限制。100% 解鎖。無需信用卡。

bullet_checked無需信用卡或建立帳號無任何限制。100% 解鎖。無需信用卡。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
獲取您的無義務諮詢
填寫以下表格或發送電子郵件至sales@ironsoftware.com
您的詳細資訊將始終保密。
被全球數百萬工程師信任
Iron Software的客戶標誌
立即獲取您的30天試用金鑰
無需信用卡或帳戶建立