[PATCH] Set correct source location for deallocator calls

Dehao Chen dehao@google.com
Tue Sep 4 20:32:00 GMT 2012


Looks like even with addr2line properly installed, the gcj generated
code cannot get the correct source file/lineno. Do I need to pass in
anything to gcj to let it know where addr2line is?
Thanks,
Dehao
#javac stacktrace.java
#java stacktrace
stacktrace.e(stacktrace.java:42)
stacktrace.d(stacktrace.java:38)
stacktrace.c(stacktrace.java:31)
stacktrace.b(stacktrace.java:26)
stacktrace.a(stacktrace.java:19)
stacktrace.main(stacktrace.java:12)
#gcj *.class -o stacktrace.exe
#./stacktrace.exe
stacktrace.e(stacktrace.exe:-1)
stacktrace.d(stacktrace.exe:-1)
stacktrace.c(stacktrace.exe:-1)
stacktrace.b(stacktrace.exe:-1)
stacktrace.a(stacktrace.exe:-1)
stacktrace.main(stacktrace.exe:-1)
The java code is shown below:
stacktrace.java
/* This test should test the stacktrace functionality.
 We only print ClassName and MethName since the other information
 like FileName and LineNumber are not consistent while building
 native or interpreted and we want to test the output inside the dejagnu
 test environment.
 Also, we have to make the methods public since they might be optimized away
 with inline's and then the -O3/-O2 execution might fail.
*/
public class stacktrace {
 public static void main(String args[]) {
 try {
 new stacktrace().a();
 } catch (TopException e) {
 }
 }
 public void a() throws TopException {
 try {
 b();
 } catch (MiddleException e) {
 throw new TopException(e);
 }
 }
 public void b() throws MiddleException {
 c();
 }
 public void c() throws MiddleException {
 try {
 d();
 } catch (BottomException e) {
 throw new MiddleException(e);
 }
 }
 public void d() throws BottomException {
 e();
 }
 public void e() throws BottomException {
 throw new BottomException();
 }
}
class TopException extends Exception {
 TopException(Throwable cause) {
 super(cause);
 }
}
class MiddleException extends Exception {
 MiddleException(Throwable cause) {
 super(cause);
 }
}
class BottomException extends Exception {
 BottomException() {
 StackTraceElement stack[] = this.getStackTrace();
 for (int i = 0; i < stack.length; i++) {
 String className = stack[i].getClassName();
 String methodName = stack[i].getMethodName();
 System.out.println(className + "." + methodName + "(" +
 stack[i].getFileName() + ":" +
 stack[i].getLineNumber() + ")");
 }
 }
}


More information about the Java mailing list

AltStyle によって変換されたページ (->オリジナル) /