2013-06-12 84 views
0

我想在Log.d和Log.e輸出期間打印出當前方法名稱的宏。現在我只需在硬編碼字符串中鍵入方法名稱,但是如果將來方法名稱發生更改,這顯然是低效的,因爲每個字符串都需要被搜索和替換。如何獲取Android/Java中調試輸出的方法名稱?

我知道使用getMethodName()作爲在這篇文章指出的:

How to get method name in Java

這其中也看起來很有希望:

Debugging with helper extension method

那裏是這些職位的無數所以,我希望找到不會影響運行時性能的最佳調試方法。由於我使用Eclipse,我想找到一個適用於該IDE的解決方案。

+0

是你是一個日食狂熱者? – pskink

+0

@pskink號你爲什麼問? – gonzobrains

+0

因爲我寫了一個eclipse插件,當你調用:Log.d(TAG,「msg」)時,你會在logcat中看到,就像你調用:Log.d(TAG,「myMethod:142,msg」) – pskink

回答

4

這就是我所知道的,這是你可以爲當前執行。

Thread current = Thread.currentThread(); 
    StackTraceElement[] stack = current.getStackTrace(); 
    for(StackTraceElement element : stack) 
    { 
     if (!element.isNativeMethod()) { 
      String className = element.getClassName(); 
      String fileName = element.getFileName(); 
      int lineNumber = element.getLineNumber(); 
      String methodName = element.getMethodName(); 
     } 
    } 
+0

我會試試看。謝謝。你認爲這對執行會有什麼影響?有沒有辦法使用條件編譯(如在C/C++),我可以通過一個簡單的標誌從生產代碼中刪除這些東西? – gonzobrains

+1

我個人用這些運行時間值(日誌級別,或完全關閉註銷等)保留課程,然後在編譯生產版本之前運行單元測試以確認所有預期值。對於性能,您可以記錄該方法的執行時間,以確定它是否真的存在問題。我無法想象它是什麼,除非你在循環的每次迭代中運行它,這也正在更新UI或其他東西。聽起來就像你想通過自定義日誌記錄類來運行所有的日誌記錄,所以很容易用全局變量來關閉它。 – Rich

0

這是一個簡單而非常有用的Eclipse插件我在上面的評論中提及:download plugin

其增量生成器,典型的構建時間在秒的分數測量的。它的名字添加到您的項目文件作爲一個新的建設者<buildCommand>

<name>org.pskink.logger.builder</name> 

應該在<buildSpec>列表

安裝最後的建設者:只需將它複製到文件夾plugins並重新啓動Eclipse

相關問題