Bir yığın izleme, nedir ve nasıl uygulamam hata ayıklama için kullanabilir miyim?
Bazen benim uygulama çalıştırdığımda benim gibi görünen bir hata veriyor:
Exception in thread "main" java.lang.NullPointerException
at com.example.myproject.Book.getTitle(Book.java:16)
at com.example.myproject.Author.getBookTitles(Author.java:25)
at com.example.myproject.Bootstrap.main(Bootstrap.java:14)
İnsanlar olarak niteliyordu "iz". yığınıBir yığın izleme nedir?Benim programda oluyor bu hata hakkında bana ne söyleyebilirsin?
Bu soru oldukça sık gördüğüm bir soru gelecek bir acemi programcı "bir hata", ve onlar sadece yapıştır kendi yığın izleme ve rastgele bir kod bloğunu anlamadan ne yığın izleme veya nasıl kullanabilir. Bu soru yardımcı bir değeri yığın izleme anlayış ihtiyacı olan acemi programcılar için bir referans olarak tasarlanmıştır.
CEVAP
Basit bir ifadeyle, biryığın izlemebu yöntem bir listesi uygulama bir özel Durum olduğu zaman ortasında olduğunu çağırır.
Basit Bir Örnek
Örnek soru şeklinde olmak üzere, tam istisna uygulamasında atıldı belirleyebiliriz. Hadi yığın izleme de bir bak
Exception in thread "main" java.lang.NullPointerException
at com.example.myproject.Book.getTitle(Book.java:16)
at com.example.myproject.Author.getBookTitles(Author.java:25)
at com.example.myproject.Bootstrap.main(Bootstrap.java:14)
Bu izleme çok basit bir yığın değildir. Eğer " ... " Evet, nerede hata oldu. listenin başında başlarsak Aradığımız şey buen üsttekiyöntem uygulamamız parçası Ara. Bu durumda:
at com.example.myproject.Book.getTitle(Book.java:16)
Bu hata ayıklamak için Book.java
aç ve çizgisinde olan 16
bak:
public String getTitle() {
System.out.println(title.toString()); <-- line 16
return title;
}
Bu bir şey (muhtemelen title
) yukarıdaki kodu null
olduğunu gösterir.
Özel bir zincir ile örnek
Bazen uygulamalar başka bir özel Durum nedeni olarak bir İstisna ve yeniden atmak yakalayacak. Genellikle bu gibi görünüyor:
try {
....
} catch (NullPointerException e) {
throw new IllegalStateException("A book has a null property", e)
}
Şuna benzer bir yığın izlemesi size verebilir:
Exception in thread "main" java.lang.IllegalStateException: A book has a null property
at com.example.myproject.Author.getBookIds(Author.java:38)
at com.example.myproject.Bootstrap.main(Bootstrap.java:14)
Caused by: java.lang.NullPointerException
at com.example.myproject.Book.getId(Book.java:22)
at com.example.myproject.Author.getBookIds(Author.java:35)
... 1 more
Bu konuda farklı bir şey "" Neden oldu. Bazen istisnalar"," birden çok bölümler. Neden olacaktır Bu, genellikle bulmak istiyorum "en düşük "" bölümler, yığın izlemesi. Neden biri olacaktır", kök neden Bizim durumumuzda, bu:
Caused by: java.lang.NullPointerException <-- root cause
at com.example.myproject.Book.getId(Book.java:22) <-- important line
Yine, çizgi NullPointerException
buraya neden olabilir Book.java
22
görünmek isteriz bu hariç.
Kütüphane kod ile daha zor bir örnek
Genellikle yığın izleri iki örnek yukarıda çok daha karmaşıktır. İşte bir örnek (çok uzun bir şey, ama zincirleme istisnalar da çeşitli düzeylerde gösterir):
javax.servlet.ServletException: Something bad happened
at com.example.myproject.OpenSessionInViewFilter.doFilter(OpenSessionInViewFilter.java:60)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.example.myproject.ExceptionHandlerFilter.doFilter(ExceptionHandlerFilter.java:28)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.example.myproject.OutputBufferFilter.doFilter(OutputBufferFilter.java:33)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.Server.handle(Server.java:326)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:943)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:756)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
at org.mortbay.jetty.bio.SocketConnector$Connection.run(SocketConnector.java:228)
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
Caused by: com.example.myproject.MyProjectServletException
at com.example.myproject.MyServlet.doPost(MyServlet.java:169)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
at com.example.myproject.OpenSessionInViewFilter.doFilter(OpenSessionInViewFilter.java:30)
... 27 more
Caused by: org.hibernate.exception.ConstraintViolationException: could not insert: [com.example.myproject.MyEntity]
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:96)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
at org.hibernate.id.insert.AbstractSelectingDelegate.performInsert(AbstractSelectingDelegate.java:64)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2329)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2822)
at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:71)
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:268)
at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:321)
at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:204)
at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:130)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:210)
at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:56)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:195)
at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:50)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93)
at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:705)
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:693)
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:689)
at sun.reflect.GeneratedMethodAccessor5.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.hibernate.context.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:344)
at $Proxy19.save(Unknown Source)
at com.example.myproject.MyEntityService.save(MyEntityService.java:59) <-- relevant call (see notes below)
at com.example.myproject.MyServlet.doPost(MyServlet.java:164)
... 32 more
Caused by: java.sql.SQLException: Violation of unique constraint MY_ENTITY_UK_1: duplicate value(s) for column(s) MY_COLUMN in statement [...]
at org.hsqldb.jdbc.Util.throwError(Unknown Source)
at org.hsqldb.jdbc.jdbcPreparedStatement.executeUpdate(Unknown Source)
at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeUpdate(NewProxyPreparedStatement.java:105)
at org.hibernate.id.insert.AbstractSelectingDelegate.performInsert(AbstractSelectingDelegate.java:57)
... 54 more
Bu örnekte, bir sürü daha var. Hakkında en çok endişeliyiz ne yöntemler arıyorbizim koducom.example.myproject
paketinde bir şey olurdu., İkinci örnekte (yukarıda), ilk kök neden için aşağı bakmak isteriz:
Caused by: java.sql.SQLException
Ancak, tüm yöntemi kitaplık bir kod altında diyor. "Yukarıda, ilk yöntem için Bak bizim kod kaynaklı çağrı: . Neden yukarı hareket ederiz
at com.example.myproject.MyEntityService.save(MyEntityService.java:59)
Tıpkı önceki örnekler yerdedir MyEntityService.java
satır 59
, çünkü bu hata kaynaklı (bu biraz tuhaf ne yanlış gitti, bu yana SQLException Birleşik Devletleri hata, ama hata ayıklama yordamı nedir, sonra).
Nasıl bir dize dönüştürmek için yığın ...
Nasıl Google hata ayıklama iletileri y...
Nasıl Android Geliştirme için MS Visua...
Nasıl Python sistem hostname almak içi...
Nasıl grep bir klasör içinde bir kelim...