2012-02-09 26 views
18

Tôi đã viết một lớp java siêu đơn giản mà là ném ngoại lệ như nó phải. Tuy nhiên stack trace tôi nhận trông như sau:"Unknown Source" trong java stack trace, tuy nhiên số dòng là trong tập tin lớp

java.lang.RuntimeException: hello 
     at Main.go(Unknown Source) 
     at Main.main(Unknown Source) 

Lưu ý: không có số dòng trong stack trace và tôi muốn có được.

Câu trả lời bạn tìm thấy khi giải quyết vấn đề này là thêm thông số chính xác vào thời gian biên dịch để đảm bảo số dòng thực sự đưa nó vào tệp lớp. Tuy nhiên, tôi không tin rằng đó là vấn đề của tôi là tôi có điều này trong build.xml kiến ​​của tôi

<javac 
    debug="true" 
    debuglevel="lines,vars,source" 
    includeAntRuntime="false" 
    classpathref="classpath.compile" 
    srcdir="${src.dir}" 
    destdir="${build.classes}" /> 

Ngoài ra, theo javap, nó trông giống như những con số đường đã làm cho nó trong:

$ javap -l ./build/classes/Main | head -n 9 
public class Main extends java.lang.Object{ 

public Main(); 
    LineNumberTable: 
    line 14: 0 
    line 22: 4 
    line 23: 15 
    line 24: 26 

Vì vậy, những gì cho? Có một param tôi cần phải thiết lập trong jvm khi tôi chạy mã?

Cảm ơn!

+0

bạn đang chạy các JVM trong chế độ máy chủ, ví dụ: 'java -server'? Ngoài ra, bạn đang chạy ra khỏi jre hoặc cài đặt jdk? – shams

+0

không sử dụng máy chủ và tôi đang sử dụng một jdk – andersonbd1

+0

Tôi không bao giờ nhận ra điều này có thể được đặt trong javac trong Ant ... Tôi đã tự hỏi tại sao stacktraces của tôi đã nhận được ít hữu ích gần đây. : P Đã thay đổi ngay bây giờ và cuộc sống là tốt hơn – Panky

Trả lời

22

Tôi nghĩ rằng cách chính xác là:

<javac debug="true" debuglevel="lines,vars,source" 

Lưu ý không có khoảng trống giữa dòng, vars, nguồn

+0

Chỉ có sự khác biệt thực sự so với trên? Nếu vậy, tôi đã thử nó và nó không giúp được gì. Cảm ơn, mặc dù. – andersonbd1

+1

bạn có thể đăng toàn bộ thẻ không? – bvanvelsen

+0

Tôi thích debug = on – lwpro2

2

Tìm thấy câu trả lời này trên another question:

này thường liên quan đến thiếu thông tin gỡ lỗi. Bạn đang thể sử dụng JRE (không JDK), trong đó không bao gồm thông tin debug cho các lớp rt.jar. Hãy thử sử dụng đầy đủ JDK, bạn sẽ nhận được địa điểm thích hợp trong stack trace

+0

tôi thấy lưu ý rằng là tốt, nhưng tôi không nghĩ rằng áp dụng đối với tôi. # 1) Tôi đang sử dụng jdk và # 2) Tôi nghĩ rằng chỉ có vấn đề bởi vì các tệp lớp được biên dịch cho các lớp api java ... tuy nhiên, đây là lớp tùy chỉnh của riêng tôi – andersonbd1

+0

Anderson là chính xác, jdk sẽ chỉ điền trong thông tin gỡ lỗi cho các thành phần sdk. Ngày đầu mà _the jre không bao gồm một compiler_. Tôi nghĩ có lẽ bạn không nên đăng bài này. –

1

tôi có chính xác cùng một vấn đề. Trong môi trường của chúng tôi nó đã giúp tắt tối ưu hóa-cờ:

<javac optimize="off" ... 

Rõ ràng Ant không không bỏ qua thuộc tính tối ưu hóa, mặc dù Ant-Doc nói cho thuộc tính "tối ưu hóa" (và chúng tôi đang sử dụng Java 1.7):

Cho biết nguồn nên được biên dịch với tối ưu hóa; mặc định là tắt. Lưu ý rằng lá cờ này chỉ bị bỏ qua bởi javac của Sun bắt đầu với JDK 1.3 (vì tối ưu hóa thời gian biên dịch là không cần thiết).

Các vấn đề liên quan