1

我正在开发一个应用程序。作为其中的一部分,当 Java 程序执行时,我们希望显示代码已执行的 Java 程序源代码的行号。我正在使用 Code 类来获取代码中方法的行号。但是我想获取已经执行的源码的行号,也就是代码路径。

我将在此基础上添加我编写的用于显示方法行号的程序。

class LineNum
{
  LineNumber[] ln = new LineNumber[300];
  JavaClass clazz ;
  Code classinfo ;

  public static void printCode(Method[] methods) {
    System.out.println("Entering PrintCode");
    for(int i=0; i < methods.length; i++) {
      System.out.println(methods[i]);

      Code code = methods[i].getCode();
      if(code != null) // Non-abstract method
      {  
        System.out.println(code.getLineNumberTable());
      }
    }
  }
  public static void main(String[] args) {
    LineNum liner = new LineNum();
    liner.clazz = Repository.lookupClass("package_name.File_name");
    printCode(liner.clazz.getMethods());
  }
}
4

3 回答 3

2

你可以打电话

StackTraceElement[] ele = Thread.currentThread().getStackTrace()

任何时候给你以前的电话。StackTraceElement 类有一个方法 getLineNumer() 来获取行号。

http://docs.oracle.com/javase/7/docs/api/java/lang/StackTraceElement.html

于 2012-08-31T10:41:43.317 回答
2

如果您使用 Log4J 作为您的日志库,您可以将其配置为输出行号作为模式的一部分。请参阅“PatternLayout”和“L”转换模式字符。

您可以使用如下转换模式:"%-5p [%t](%L): %m%n"来产生:

   DEBUG [main](103): Message 1
   WARN  [main](104): Message 2

PatternLayout API: http: //logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/PatternLayout.html

于 2012-08-31T10:51:51.453 回答
1

我认为使用 lo4j 是最好的解决方案(@bazwilliams 是如何描述的)。代码依赖于简单的库,并且日志行号可以在代码之外进行可选配置。

@bazwilliams - 您只能为选定的日志记录类别配置布局模式(从而配置选定的附加程序)。

PS。我回答是因为我不知道如何评论@bazwilliams 的答案(或者我不能)。

于 2012-08-31T11:15:04.130 回答