작은 프로젝트에서 작업하는 동안 이상한 것을 발견했습니다. 버그를 추적하기 위해 코드에 System.out.println();
줄을 썼습니다. 이상하게도 IDE에서 버그가있는 프로그램을 실행할 때 Exception stacktrace의 행과 그 print 문 중 일부의 인쇄물이 프로그램이 실행될 때마다 다른 순서로 나옵니다. 상식은 동일한 프로그램이 매번 같은 방식으로 실행되도록 지정합니다 (예외가 포함되므로 모든 실행에 대해 출력도 동일해야합니다). 그러나 이것은 사실이 아닙니다. 선의 내용은 동일하게 유지되며 스택 추적 선과 인쇄 선의 순서는 동일하게 유지되지만 매번 다르게 혼합됩니다. 다음 시간이 될 수 있지만 그래서 하나 실행에, 콘솔 출력은Exception과 println() 행이 같은 프로그램에 대해 매번 다른 순서로 나오는 이유는 무엇입니까?
populatePinArrays: An input pin added to gate!
populatePinArrays: An input pin added to gate!
populatePinArrays: An output pin added to gate!
Exception in thread "main" java.lang.NullPointerException
at Gates.Pin.isReadyToEvaluate(Pin.java:28)
at Gates.Pin.evaluate(Pin.java:19)
at Gates.TheCircuit.evaluateTheCircuit(TheCircuit.java:42)
at main.Main.main(Main.java:37)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
CircEval: all set to dirty
CircEval: all input pins set to clean
입니다
Exception in thread "main" populatePinArrays: An input pin added to gate!
populatePinArrays: An input pin added to gate!
java.lang.NullPointerException
populatePinArrays: An output pin added to gate!
CircEval: all set to dirty
CircEval: all input pins set to clean
at Gates.Pin.isReadyToEvaluate(Pin.java:28)
at Gates.Pin.evaluate(Pin.java:19)
at Gates.TheCircuit.evaluateTheCircuit(TheCircuit.java:42)
at main.Main.main(Main.java:37)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
내가 주로 자바/JVM의 본격 비교 책임이며, 정확히 무엇에 대한 호기심 부탁 해요 후드 아래에서 일어나는 일이지만,이 문제가 내 프로그램에서 몇 가지 결함을 지적한다면, 나는 알고 싶습니다.
코드가 귀하의 질문과 관련이 있다고 생각하지 않습니까? – shmosel
"상식은 동일한 프로그램이 매번 같은 방식으로 실행되도록 지시합니다. 예외는 포함됩니다." 상식일지도 모르지만, 프로그래머는 그 사실이 사실임을 확실히 알고 있습니다. – Kayaman
상식은 서로 다른 시간대에 두 가지 스트림을 플러시 할 수 있도록 지시합니다. ;) –