2016-11-07 67 views
0

gdb在命中斷點後嘗試執行一兩行命令後似乎處於錯誤狀態。有什麼具體的我可以在Eclipse中做到解決這個問題?gdbserver在Eclipse中未正確執行步驟(arm cortex a9)

攝製:在Eclipse

  1. 開始調試會話,連接到遠程目標
  2. 設置在Eclipse中斷點,然後觸發它的目標。
  3. 斷點在Eclipse中正確命中。現在「跨過」一兩行。

預期結果:

  • '步過' 將執行一條線,因爲你通常期望。

實際結果:

  1. 而不是去到下一行號的,它出現在節目「繼續」。在Eclipse的調試視圖中,顯示所有線程的樹會將它們全部最小化,並且它們無法展開以顯示當前堆棧。此外,「步驟...」按鈕不再啓用,並且可以按下「暫停」和「停止」按鈕。這意味着程序正在運行,這是不可預料的,因爲我們以前曾經按下過「步驟」。看目標,它沒有運行,而是仍然暫停。
  2. 如果我們在Eclipse中點擊'暫停',然後打開具有斷點的特定線程,我們可以看到指令指針返回到我們預期在之前點擊'跳過'之後的正確位置。所以,乍一看,我們的工作流程似乎只是出現了一個呃逆,而且只要步進不正確,只需點擊「暫停」並找到我們以前的線程。但很快事情就停止工作...

我已經能夠重現這個問題,沒有Eclipse,只是使用命令行gdb和遠程gdbserver。發生相同的行爲。一個可笑的潛在解決方法是 - 一旦你達到了你的斷點,'設置調度程序鎖定'。之後,你可以踏上你心中的內容。但是,我沒有很好的理解這是做什麼。

任何人有任何輸入?

謝謝。

回答

0

您連接到設備後,在Eclipse GDB控制檯,輸入:

集調度鎖步

這是一個GDB客戶端命令的Eclipse的UI不直接支持,所以你必須手動輸入。您還可以將其添加爲Eclipse在安裝過程中調用的另一個命令的掛鉤,因此您不必手動輸入它。需要注意的是,必須在設備連接後調用它。所以,你不能直接在你的gdbinit文件中調用這個命令,它必須是一個鉤子(如果你試圖自動化這一步,而不是直接在控制檯中輸入命令)。