2014-02-19 41 views
2

我正在開發一個Windows應用程序,該應用程序在客戶端顯示一些性能問題。 所以,我創建一個調試記錄器在文件中使用這個碼的碼 Ç 每行的#if DEBUG後 LogwithTime(「這個過程已完成」); #ENDIF如何在客戶端調試我的應用程序exe

但我無法記錄的日誌,作爲文件未在調試模式下運行... 如何我把它在調試模式下,使我能得到的#if DEBUG和#之間的代碼endif工作?

感謝

+0

您必須在調試模式下編譯可執行文件並將該文件(以及任何關聯的DLL)移交。 – 48klocs

+2

您可能需要考慮使用Log4Net等日誌庫。然後,您可以爲您的應用程序設置日誌級別,以控制哪些日誌和哪些日誌不會被記錄。 – juharr

+0

或者創建一個自定義TraceSource,您可以將跟蹤信息寫入......然後可以定義不同的app.config文件,以設置不同的TraceListeners以將跟蹤​​輸出捕獲到文件,控制檯...並且還可以更改開關在TraceSource上,所以它不會生成任何跟蹤輸出(即聽衆不會收到任何東西)。 http://msdn.microsoft.com/en-us/library/ms228993(v=vs.110).aspx –

回答

1

您需要在調試模式下重新編譯整個解決方案並將其發送給客戶端。

你不能只是把它放在Debug或Release模式下。以發佈模式編譯的代碼已經過優化,即使從理論的角度來看,它也不可能將其轉移到調試,例如,您的客戶端計算機上不存在日誌記錄行。

2

編譯時使用調試配置您的應用程序調試標誌設置。您已使用發佈配置編譯您的應用程序。

0

有時,在這種情況下,您可以使用包含在調試模式下您的DLL,以獲取有關您有問題的更多詳細信息,補丁交付客戶。之後,您可以再次發佈發行版dll。

我們提供在某些應用中僅調試DLL,如果沒有真正的理由,提供釋放DLL。

3

#if DEBUG只包含代碼,如果您正在執行Debug構建,並且在發佈版本中被省略(即,這是#if DEBUG預處理器指令的整個點)。

要在發佈版本中這個日誌代碼我會做什麼改變預處理器指令,更有意義的事情,然後再從項目屬性控制它。換句話說,改變你的代碼

#if INCLUDE_TIME_LOGGING LogwithTime("This Process completed"); #endif 

然後去項目屬性,併發布版本,把INCLUDE_TIME_LOGGING在項目 - >建設 - >條件編譯符號。

一旦你完成故障排除,那麼你可以從條件編譯符號刪除,重建,並記錄你的代碼將被從這個調試自由(因此多一點效率)。使它很容易控制。

正如其他建議,log4net的是爲這個偉大的爲好,而且不需要重建,你可以通過配置文件控制。

這應該做到這一點!

相關問題