2015-09-24 57 views
0

我想解決一些內聯SSE2程序集的總線錯誤。源代碼有一個使用5個指針的宏,我懷疑其中一個沒有對齊。GDB的「這裏」是什麼?

我在源代碼行設置了一個斷點。但是當我執行disass時,它會從函數的頂部反彙編,而不是調試器停止的地方。有數百條裝配線,所以它對我沒有什麼幫助。按ENTER響應「按ENTER鍵繼續」的響應時間爲30到40次,響應速度很快。

我嘗試了一個disass $pc,但是它從函數的頂部進行了dsassembled。我也嘗試了disass .(用點意思是「在這裏」),但導致:

A syntax error in expression, near `.'. 

是什麼GDB用來表示「這裏」?

回答

0

您正確使用$pc來表示當前位置。這與disassemble命令一起使用時沒有達到預期效果的原因是,disassemble命令默認情況下會嘗試反彙編包含您所看到的給定地址的函數。

存在可以給予拆卸,例如start,end其中startend是地址或start,+length其中start是地址length是字節數替代形式。

在gdb提示符處嘗試help disassemble以獲取更多信息。

作爲替代方案,你也可以使用x(檢查)命令顯示的指令,而智能查找功能行爲的開始,所以x/10i $pc將顯示10個指令從$pc開始。如果您只希望將指令反彙編,但是您無權訪問disassemble命令中提供的/m/r修飾符,這可能會有所幫助。這些修飾符顯示交錯源和彙編器(對於/m)或原始指令字節(對於/r)。

而且,如果全按回車鍵繼續件事是年紀大了,那麼你可以嘗試set height 0關掉傳呼機,一定要確保你有足夠的回捲在終端雖然:)

+0

感謝安德魯。是的,我也閱讀了手冊頁。但問題是,*「GDB用什麼來表示」這裏「?」*如果GDB沒有「這裏」(比如說,WindDBG)的概念,那麼說明它並告訴我它不可能在調試器停止的地方。 – jww

+0

好的,我已經將答案擴展到了解決您的問題。 – Andrew