2013-06-28 46 views
0

我正在用C#編寫一個很大的項目。它是一種遊戲保護系統,可以防止玩家在多個級別上作弊,包括本地隧道和使用多種算法的高級網絡加密。Console.WriteLine發佈模式編譯

問題是關於Console.WriteLine方法。我在我的程序中使用了很多,因爲它很難跟蹤多線程的進度,沒有正確的輸出。有沒有辦法,人們可以在運行時捕獲這個輸出?它包含一些敏感信息。應用程序在發佈模式下構建,稍後進行混淆(生成後腳本)。

我應該使用Debug.WriteLine方法嗎?保護應用程序不被反向工程是我的首要任務。我讀過,調試的方法甚至沒有編譯成代碼,在發佈模式。另一方面,Console.WriteLine有一些很酷的重載。 有沒有什麼辦法可以保留控制檯方法並保護它,防止未經授權的訪問?

+0

你怎麼樣不使用Console.WriteLine和登錄到安全的位置? – tnw

+0

@tnw他不需要保護它;他只需要將所有控制檯寫入完全從發佈版本中刪除,並且只存在於調試版本中。 – Servy

+0

'Debug.WriteLine'應該有足夠的重載來覆蓋'Console.WriteLine'可以做的所有事情。與「Console」不同的是,它會禁止一些系統值類型,例如'bool'和'int',所以它的效率較低,但它僅適用於調試版本,開始時應該沒有問題。只要使用它。 – Servy

回答

1

使用類似NLog的條件編譯,使其不包含在發佈版本中。然後,您可以在調試時尾隨日誌,並獲取相同的信息,而不會泄露給用戶。

或者,如果你更舒適的使用Console.WriteLine,只是包裝用條件編譯調用,像這樣:

#if DEBUG 
    Console.WriteLine("Debug version"); 
#endif 
+3

或甚至更好,他可以創建一個替代類的控制檯,寫到任何他想要的地方;調試,控制檯或某些日誌記錄API。但最好的是,他不需要在他的代碼中使用#if DEBUG。他只需要在他的替換類中,他可以簡單地在發佈版本中刪除WriteLine()實現。 – Pete

+0

@Pete我認爲,這是最好的選擇。謝謝你,先生。 –

2

如果你不需要你的控制檯輸出都在你的發佈build,Debug類中的所有成員都標記爲ConditionalAttribute,這意味着它不會包含在發佈版本中。所以是的,只要使用Debug.WriteLine,如果這是你想要的。

1

與Debug類方法一樣,您可以編寫除DEBUG構建外編譯器忽略調用的方法。他們只需要返回void,這樣省略通話就沒有任何影響。見ConditionalAttribute。與條件編譯相比,優勢在於您不需要使用條件指令亂丟代碼。

如果你喜歡Console方法,你可以把它們包裝在自己的類中。

相關問題