2012-01-15 46 views
0

我知道這個問題有點簡單,但我覺得我錯過了一些大而明顯的東西。我正在學習Android的圖形處理教程(http://www.droidnova.com/playing-with-graphics-in-android-part-vi,209.html)。當我看看logcat時,它會告訴我一個行號,它認爲是空指針異常來自)當我用常量替換從類中拉出的數字時,空指針異常只是移動到程序中的其他位置。eclipse中的空指針異常,同時爲android編程

在eclipse調試器中是否有某種方法來確定它所查看的特定指針是否爲null?我得到了空指針異常,這就是說,有一個異常,但沒有關於什麼指針應該是空的信息。另外,當我嘗試放置測試斷點時,雖然我可以讓調試器出現並停在斷點處,但logcat顯示仍然拋出空指針異常,即使應該命中斷點在引發異常的部分出現之前。爲什麼斷點被忽略?

+0

您可以一步通過與Eclipse調試器的代碼,檢查,看看有什麼變量爲空,或者您可以使用放在上述錯誤一個println語句,(S)看什麼變量實際上是空的。 – 2012-01-15 01:00:50

+0

默認調試器沒有辦法簡單地看到它認爲是空的嗎?這在調試接口方面似乎是一個巨大的疏忽,所以如果沒有辦法簡單地存儲導致異常顯示給開發人員的調用,那麼必定有一個原因。 – Xantham 2012-01-15 01:04:59

+0

如果您在此處逐步完成代碼並觀察重要變量,那麼Eclipse調試器將顯示爲空。我根本沒有看到任何疏忽。 – 2012-01-15 01:08:11

回答

2

在eclipse調試器中是否有某種方法來確定它所查看的特定指針是否爲空,而不應該是這樣?

這裏的答案是肯定的,並沒有號:你不能告訴Eclipse來指定在檢查null這指針。當你在課堂上或功能上被打破時,你所能做的就是看指針本身。 是的:所有你需要做的就是拆分你的電話,你可以找到對象。例如,在問題代碼似乎是:

_currentGraphic.getCoordinates().setX((int) event.getX() - _currentGraphic.getGraphic().getWidth()/2); 

你會拆分此成(原諒假,但我不知道您正在使用哪種類型):

Type _coords = _currentGraphic.getCoordinates(); 
Type _graphic = _currentGraphic.getGraphic(); 
Type _width = _graphic.getWidth(); 

_coords.setX((int) event.getX() - _width/2); 

現在,這行代碼被分解成每行一個對象,很容易確定哪個是違規者。

爲什麼斷點被忽略?

這一個有點複雜。您的斷點可能會或可能不會被忽略。一般來說,如果你正在達到一個斷點,它應該依次達到所有這些斷點。但是,在Eclipse中,我注意到有時在某些情況下忽略斷點。出於某種原因,adb沒有完全與Eclipse調試器集成。這意味着如果您在當前正在運行的調試中更改斷點,它可能會或可能不會識別它們。通常完全殺死該應用程序並重新啓動它就足夠了。

此外,有時adb和調試器不能正確同步。你可以使用一個命令(最好在你的代碼的開頭),這個命令可以很好地幫助你。如果插入命令Debug.waitForDebugger(),則同步將到位,允許最早的斷點(第一個onCreate()和類似的那些斷點)正常工作。該命令確實讓你調試速度慢得多。在關鍵點使用這一點也將減輕忽略前面討論的公然斷點。

現在需要注意的是,僅僅因爲你認爲它忽略了它們,並不意味着它是。有時(尤其是在Android的情況下),執行不一定會經過開發人員認爲的那樣。例如,可以在構造函數ViewClass(Context context)中設置一個斷點,實際上它是通過構造函數ViewClass(Context context, AttributeSet attr)通過XML創建的。哎呀,即使是一個被遺忘的對象創建,也可能以錯誤的方式完全控制執行。如果對象具有static成員或在初始化(不是對象初始化)上運行的代碼,則這可能尤其如此。不看你的代碼,我不能說發生了什麼,但希望這給你找到你的答案的工具。

希望這有助於

FuzzicalLogic

+0

謝謝你的迴應。由於它是一個教程,它有正確的源代碼可用(單獨從本教程的演練討論),我發現錯誤。有人忽略了教程中的一些小類型的內容,但含義很大,另一類是教程作者忘記將其放入教程解釋中的東西,但在主源代碼中。但這絕對是一個很好的答案,尤其是對於你對斷點問題的解釋。謝謝 – Xantham 2012-01-15 22:51:09

+0

當教程將正確的工作代碼從演練中分離出來時,就得愛上它。 :)使事情充滿樂趣! – 2012-01-16 17:08:50