我在调试Android应用程序时遇到了一个奇怪的问题。 为了准确起见,我在这里复制我正在运行的确切代码:
// Get the puzzles from cache
List<PuzzleDetails> newPuzzles = m_cachedPuzzles.getPuzzles(count);
if(newPuzzles.size() > 0){
// Remove from cache
m_cachedPuzzles.removePuzzles(newPuzzles); // LINE (A)
// Add the new puzzles from cache immediately
m_ownedPuzzles.addPuzzles(newPuzzles);
Log.d("requests", "" + newPuzzles.size() + " moved from cache to user");
}
int left = count - newPuzzles.size();
String deviceId = ResourcesPublisher.getInstance().getDeviceId();
// Don't let anyone else use these points for now
ChallengePointsManagerImpl.getInstance().usePoints(left);
Log.d("requests", "aquirePuzzles(" + left + ")");
// Get a list of requests for 'left' number of puzzles
RequestList reqList = getRequestList(left);
// TODO this is a bug, now
if(reqList.size() > 1){
reqList = getRequestList(left); // LINE (B)
}
当我运行此代码时,踩到线路后(A) m_cachedPuzzles.removePuzzles(newPuzzles); 调试器“跳转”到最后一行(B) reqList = getRequestList(左);
一个简单的检查表明它确实跳过了这些代码行之间的所有代码。 例如,Log.d(...)从未被调用或写过。
任何人都可以告诉我为什么会这样?
谢谢!
答案 0 :(得分:3)
尝试右键单击&gt;在编译代码之后和开始调试之前,项目refresh
出现在 Project Explorer 上。
答案 1 :(得分:0)
也许从A行抛出异常,下一步对应于它关闭这个堆栈框架?
答案 2 :(得分:0)
mIsReaded = (mIsReaded)?false:true;
//mIsReaded = !mIsReaded;
saveReadFlag();
refreshUI();
Toast.makeText(getSherlockActivity(),...
在我的情况下,评论的代码行会导致类似的问题(跳过两行)。为了解决这个问题,我刚刚通过上面发布的代码行改变了这一行(我的意思是mIsReaded =(mIsReaded)?false:true;)所以不同的情况有不同的解决方案。这是编译器对代码进行优化的结果,所以请重构(内部) m_cachedPuzzles.removePuzzles(newPuzzles);
答案 3 :(得分:0)
我遇到了同样的问题。问题是,您可能正在调试IDE中的代码而不是服务器上的代码。您必须从服务器上的IDE(Eclypse,Netbeans等)部署代码。它对我有用!祝你好运!
答案 4 :(得分:0)
与Eclipse没有直接关系,但我使用Xamarin Extension for Visual Studio遇到了类似的问题,我的实现可能会有所帮助。我正在开发一个带有类库的应用程序。当我对库进行更改然后开始模拟我的应用程序时,DLL将不会总是重建,因此调试器将在我最近的更改之前逐步执行PDB。在重建DLL之后,它将逐步完成。
简而言之,如果进行了任何更改,则重建依赖项。
希望您解决问题。有一个好的
答案 5 :(得分:0)
使用多行评论评论TODO
/*// TODO this is a bug, now*/
再试一次。