3

C# には発信者情報があります

public void DoProcessing()
{
    TraceMessage("Something happened.");
}

public void TraceMessage(string message,
        [System.Runtime.CompilerServices.CallerMemberName] string memberName = "",
        [System.Runtime.CompilerServices.CallerFilePath] string sourceFilePath = "",
        [System.Runtime.CompilerServices.CallerLineNumber] int sourceLineNumber = 0)
{
    System.Diagnostics.Trace.WriteLine("message: " + message);
    System.Diagnostics.Trace.WriteLine("member name: " + memberName);
    System.Diagnostics.Trace.WriteLine("source file path: " + sourceFilePath);
    System.Diagnostics.Trace.WriteLine("source line number: " + sourceLineNumber);
}

// Sample Output:
//  message: Something happened.
//  member name: DoProcessing
//  source file path: c:\Users\username\Documents\Visual Studio 2012\Projects\CallerInfoCS\CallerInfoCS\Form1.cs
//  source line number: 31

MSDN リンク: CallerInfo

Javaに同等の注釈があるかどうかを知りたいですか?

これらの機能は、追跡を改善するのに役立ちます

アップデート :

私はクラスを書きました:

public class Trace {

    public static void trace() {
        StackTraceElement[] stk = Thread.currentThread().getStackTrace();
        System.out.println(String.format("LineNumber : %s, ClassName : %s, MethodName : %s, SourceLocation : %s",

                        stk[1].getLineNumber(), stk[1].getClassName(), stk[1].getMethodName(), stk[1].getFileName())


        );
    }

}

そして trace() メソッドを呼び出します:

public class Main {
    public static void main(String[] args) throws Exception {
        Trace.trace();
    }
}

および結果:

LineNumber : 8, ClassName : Trace, MethodName : trace, SourceLocation : Trace.java

私には当てはまりません。次のような結果が必要です。

LineNumber : 3, ClassName : Main, MethodName : main, SourceLocation : Main.java

実際、クラスとメソッドがどのように trace() を呼び出すかを知りたい (親)

4

1 に答える 1

0

例外を作成し、そのスタック トレースを出力します。

Exception e = new Exception();
e.printStackTrace();
//or
StackTraceElement[] stack = e.getStackTrace();
StackTraceElement last = stack[0];

編集:コメントでは、ファビアンがより良い解決策を提供しました。例外を作成する必要はありません:

Thread.currentThread().getStackTrace()
于 2015-10-24T07:52:21.417 に答える