Eclipse调试器“跳过”跳过重要的代码

时间:2012-01-30 00:35:02

标签: java android eclipse debugging

我在调试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(...)从未被调用或写过。

任何人都可以告诉我为什么会这样?

谢谢!

6 个答案:

答案 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*/

再试一次。