2010-06-25 38 views
26

Tôi có tệp Java, khi tôi biên dịch, tôi sẽ chỉ có thể thấy 100 lỗi đầu tiên trên bảng điều khiển sau khi thoát java (javac) đó. Làm cách nào để tôi có thể xem tất cả các lỗi biên dịch trên bảng điều khiển? Cảm ơn trước- opensidLỗi biên dịch Java giới hạn ở 100

+1

có nhiều khả năng là một lỗi duy nhất gây ra tất cả các lỗi tiếp theo. Tất cả các lỗi còn lại không liên quan nếu bạn sửa chữa nguyên nhân gốc rễ. –

+0

khi phản ánh thêm, có thể có lý do không rõ ràng muốn xem tổng số. có thể để giữ một thước đo về mức độ xấu của một số cơ sở mã cụ thể? vẫn có vẻ hơi ngờ vực với tôi. –

+0

Vì phần lớn các thông báo lỗi có khả năng là các thông điệp ảo, @Peter Recore, vâng, đó sẽ là một số liệu đáng ngờ. ;) –

Trả lời

29

Nói chung trình biên dịch sẽ từ bỏ sau 100 lỗi. Hầu hết các lỗi sau thời điểm này có thể sẽ do một trong những lỗi đầu tiên gây ra. Nếu bạn phải có nhiều lỗi hơn, hãy xem các tùy chọn javac -Xmaxerrs-Xmaxwarns

+0

- Xmaxerrs 1000. Bỏ qua dấu bằng từ đối số. –

+1

Nếu tôi muốn chuyển giá trị này cho Javadoc của 'org.apache.tools.ant.taskdefs.Javadoc' Cách xác định các giá trị này? –

+0

Ví dụ: javadoc.createArg(). SetValue ("- J-XX: MaxPermSize =" + vmMaxPermSize); Điều gì sẽ là datatype của Xmaxerrs và Xmaxwarns? số nguyên là ok? –

4

Bạn đã thử tùy chọn dòng lệnh -Xmaxerrors? đi here và tìm kiếm "maxerrors"

+2

Cảm ơn Peter của nó -Xmaxerrs – openssid

0

Nếu bạn đang sử dụng hệ điều hành Windows, hãy thử biên dịch các nguồn của bạn bằng Command Prompt. Sau đó, dấu nhắc lệnh sẽ không thoát khỏi lỗi.

+0

Cảm ơn Purushotham nhưng tôi đang sử dụng Linux !!! – openssid

+0

Sau đó, bạn có thể biên dịch bằng cách sử dụng Terminal. Nếu bạn vẫn không thể thấy thì sử dụng phương thức printStack để in thông báo lỗi trong một tệp. –

+0

Có Purushotham, tôi đang sử dụng Terminal, nhưng tôi đã có lỗi biên dịch, tôi đã quan tâm đến việc biết lỗi vượt quá 100, Với "javac -Xmaxerrs 200" tôi có thể thấy 200 lỗi. – openssid

2

Nếu bạn đang sử dụng Eclipse, Preferences > Java > Compiler > Building > General sẽ cho phép bạn chỉ định nhiều sự cố hơn trên mỗi đơn vị.

1

Trình biên dịch Java từ bỏ sau một số lỗi nhất định khi biên dịch tệp vì Java là một trong những ngôn ngữ khó tái hợp nhất nguồn với trạng thái mong đợi sau khi lỗi. Điều này có nghĩa là một dấu chấm phẩy bị đặt không đúng chỗ có thể tạo ra hàng tá lỗi (hoặc nhiều hơn — cách nhiều hơn trong một số trường hợp cực cạnh) có ít hoặc không liên quan đến lỗi thực tế. Không có điểm nào trong việc in ra "tất cả các lỗi" trong mã nguồn của bạn bởi vì phần lớn trong số đó có thể là lỗi ảo.

Khắc phục một số lỗi rõ ràng, dễ hiểu đầu tiên mà bạn có thể tìm thấy trong đầu ra trình biên dịch của mình và thử lại. (Đừng quên tìm kiếm các biến thể của những lỗi đó trong phần còn lại của nguồn của bạn!) Nhận được nhiều thông báo lỗi hơn cho mỗi lần biên dịch chạy có thể sẽ không giúp đỡ và thay vào đó, trên thực tế, chỉ phục vụ cho sự bối rối và chán nản.

+0

Tôi rất muốn biết có bao nhiêu lỗi có thể xảy ra do lỗi đơn giản. – openssid

+1

Bạn sẽ không tìm thấy. Đó là điểm. Hầu hết các lỗi là các lỗi ảo do giới hạn phân tích cú pháp gây ra (và bản chất không thể giải mã được của Java). Tất cả bạn sẽ thấy là trình biên dịch thực sự ngu ngốc và không thể tìm ra lỗi thực sự so với "lỗi của misopportunity". –

+0

Tôi không biết tại sao bạn nghĩ Java là 'một trong những ngôn ngữ khó có thể đồng bộ hóa lại nguồn với trạng thái mong đợi sau một lỗi' và 'không thể khai báo được'. Đó là một ngôn ngữ dấu chấm phẩy khá chuẩn, thuộc loại chúng tôi đã xây dựng các trình phân tích cú pháp vững chắc trong nhiều thập kỷ và các trình phân tích cú pháp có lỗi trong chúng, kể từ những năm 1970 nếu không sớm hơn. Lỗi biên dịch tầng thường do các số nhận dạng không khai báo và các lỗi * ngữ nghĩa * khác. – EJP

8

Nếu bạn đang sử dụng gradle:

allprojects { 
    gradle.projectsEvaluated { 
    tasks.withType(JavaCompile) { 
     options.compilerArgs << "-Xmaxerrs" << "1000" 
    } 
    } 
} 
1

Và nếu bạn sử dụng kiến ​​, hãy chắc chắn để sử dụng

<compilerarg value="-Xmaxerrs"/> 
<compilerarg value="5"/> 

và không

<compilerarg value="-Xmaxerrs 5"/> 

Tôi luôn luôn quên.

+0

nếu bạn muốn sử dụng "-Xmaxerrs 5", bạn có thể sử dụng '' thay thế. –

1

Trong trường hợp bạn đang sử dụng kiến ​​, sau đây sẽ làm việc:

<compilerarg line="-Xmaxerrs 10000" /> 

Lưu ý rằng bạn đang sử dụng "dòng" tranh luận chứ không phải là "giá trị" lập luận như trong câu trả lời ở trên https://stackoverflow.com/a/42396745/2200690

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