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

调试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(left);

一个简单的检查表明它真的跳过了这些代码行之间的所有代码。 例如Log.d(...)从来没有被调用也没有被写入。

任何人都可以给我一个线索为什么会发生?

谢谢!


尝试在编译代码之后并开始调试之前,在项目资源管理器上显示的项目上执行右键单击> refresh


也许从A行抛出一个异常,下一步对应于关闭这个堆栈帧?


        mIsReaded = (mIsReaded)?false:true;
        //mIsReaded = !mIsReaded;
        saveReadFlag();
        refreshUI();
        Toast.makeText(getSherlockActivity(),... 

在我的情况下,评论codeline导致类似的问题(两行被跳过)。 为了解决这个问题,我刚刚通过上面的代码行更改了这一行(我的意思是mIsReaded =(mIsReaded)?false:true;)因此,不同的案例有不同的解决方案。 它是由编译器进行代码优化的结果,所以请重新构造(内部)m_cachedPuzzles.removePuzzles(newPuzzles)中的某些内容。

链接地址: http://www.djcxy.com/p/10403.html

上一篇: Eclipse debugger "jumps" skipping important code

下一篇: Why "NOT IN" does not work in this NSPredicate?