C 執行緒手冊 第六章 執行緒除錯與跟蹤 跟蹤開關

2021-07-06 09:53:27 字數 2930 閱讀 6371

當你的程式接近部署階段時,你可能想從**中去掉所有的跟蹤和除錯訊息。然而,你不得不從**中一條一條地尋找除錯指令並將其去掉。對於這種情況你可以在程式編譯期間使用編譯標誌處理。從visual studio.net ide, 你可以在解決方案管理視窗右鍵工程名->從選單頁選擇屬性。如下圖對話方塊顯示:

你只需要簡單地將定義除錯常量和跟蹤常量選項勾掉,重新編譯解決方案,所有的跟蹤和除錯**都將會被從應用程式中被去掉。

為了去掉跟蹤功能,你可以使用csc.exe 命令列編譯器。在編譯時使用/d:trace=false /d:debug=false 開關。

對跟蹤**新增開關功能允許我們在執行時啟用/反啟用跟蹤訊息。通過簡單地在我們程式的配置檔案中定義乙個值,你就可以啟用跟蹤功能而不用重新編譯**。通常情況下,為了維持跟蹤資訊你需要將其整合到應用程式中,結果就是程式變得越來越大、越來越慢,即便跟蹤開關已經被關閉。

booleanswitch 和 traceswitch 類是.net framework 提供來是實現這些開關的。讓我們先來看看booleanswitch 類。

在跟蹤**中使用這個類,你可以通過簡單地改一下配置檔案來啟用/反啟用訊息。writelineif() 和 writeif() 方法根據booleanswitch 類的enabled 屬性決定是否寫訊息。為了在你的程式中新增開關你需要按以下步驟執行:

2. 開啟配置檔案新增如下資訊。0 表示禁用跟蹤功能,1 表示啟用跟蹤功能。

xml 

version

="1.0" encoding

="utf-8" ?>

<

configuration

>

<

system.diagnostics

>

<

switches

>

<

add

name

="myswitch" value

="1"/>

switches

>

system.diagnostics

>

configuration

>

3. 在**中建立乙個新的booleanswitch 物件並設定其名字與配置檔案中的一樣。在下面的**中我們定義乙個全域性booleanswitch物件:

static 

booleanswitch bs;

static void main(string args)

在main() 方法中我們建立了物件,並使用與配置檔案中相同的名字對其初始化。writelineif() 方法僅當配置檔案中的enabled 設定為1 時才寫訊息。

這個類是booleanswitch 類的高階版本因為它允許我們選擇是否反啟用跟蹤功能或者按照不同重要層次來顯示資訊。下表列出了不同等級:

所以,當發生了乙個錯誤時,你可以改變應用程式配置檔案,來設定只向監聽程式寫入你加到**中的錯誤資訊,這樣可以僅關注這些資訊。配置檔案的設定與booleanswitch 例子相同。**中的改變是我們需要從traceswitch 類來例項化乙個物件。還有我們將在類中使用列舉來確定跟蹤訊息的層次。現在來看乙個例子,traceswitchexample.cs:

static 

traceswitch ts;

[stathread]

static void main(string args)

我們定義了乙個全域性traceswitch 物件然後通過配置檔案中的名字生成乙個新的例項。我們新增乙個文字***到程式中。然後啟動乙個新執行緒來連線資料庫獲得region 表中的所有資訊。

如果執行緒已經啟動而且open() 方法產生乙個異常時將會產生一條錯誤訊息:

private static void dbthread()

}catch (exception ex)

finally}}

當在配置檔案中設定值為1時,traceerror 資訊的輸出結果如下:

2012/4/25 21:35:29 an error occured in database access, details: 在與 sql server 建立連線時出現與網路相關的或特定於例項的錯誤。 

未找到或無法訪問伺服器。請驗證例項名稱是否正確並且 sql server 已配置為允許遠端連線。 (provider: sql 網路介面, error: 26 - 定位指定的伺服器/例項時出錯)

當配置檔案中設定值為3時,traceinformation 資訊的輸出結果如下:

2012/4/25 21:37:10- entered in main() 

2012/4/25 21:37:12- entered in dbthread() 

2012/4/25 21:37:12- execute sql statement 

2012/4/25 21:37:27 an error occured in database access, details: 在與 sql server 建立連線時出現與網路相關的或特定於例項的錯誤。 

未找到或無法訪問伺服器。請驗證例項名稱是否正確並且 sql server 已配置為允許遠端連線。 (provider: sql 網路介面, error: 26 - 定位指定的伺服器/例項時出錯)

debug 類提供與trace 類同樣的功能。當你改變trace 類提供的***集合中的***程式時,你可以在debug 類中做同樣的事情。

這兩個類最大的不同在於應用的不同場景。debug 類用於除錯階段新增資訊。在部署我們的應用程式之前,你將建立乙個發布版本同時自動去除所有除錯資訊。因此,你可以在程式執行階段需要的時候新增trace 類功能。

第六章 多執行緒 設定以及獲取執行緒名稱

設定以及獲取執行緒名稱 1 用thread設定多執行緒中,設定並獲取執行緒名稱 package com.jh.www public class demo1 t.setname 灰太狼 t.start private static void demo start 2 runnable中設定並獲取執行緒...

第六章(4)終止執行緒的執行

終止執行緒的執行 若要終止執行緒的執行,可以使用下面的方法 執行緒函式返回 最好使用這種方法 通過呼叫 exitthread 函式,執行緒將自行撤消 最好不要使用這種方法 同乙個程序或另乙個程序中的執行緒呼叫 terminatethread 函式 應該避免使用這種方法 包含執行緒的程序終止執行 應該...

c 第六章 模板

1 函式模板 template t add t a,t b return a b 隱式呼叫 add 5,6 顯示呼叫 add 5,6 模板之間可以構成過載,模板與普通函式之間也可構成過載,呼叫順序如下 跟某一普通的引數完全匹配,呼叫之,跟函式模板的引數可以完全匹配 隱式呼叫 呼叫之,跟函式模按引數不...