我有一個數組,我不斷修改。在我的程序完成後執行我的修改並不完全符合我希望他們做的事情,所以我的數組並沒有變成我想要的方式。我有一個讀取數組內容的函數。有沒有辦法使用gdb並在某處放置斷點,然後運行讀取數組內容的函數?我想找出問題出在哪裏。 Gdb不讓我運行「p readArray()」。 f我有一個斷點。如何在斷點處運行gdb中的程序函數?
回答
這聽起來像你想要的是在陣列上設置手錶。語法是watch <expression>
- 參考this question瞭解有關使用動態數組的手錶的更多信息(它是C++,但在C中應該相同)。
使用「命令」在命中特定斷點時運行命令。例如,對第一個斷點運行命令:
(gdb) commands 1 Type commands for when breakpoint 1 is hit, one per line. End with a line saying just "end". > call readArray() > end
您可以使用「信息斷裂」,以確定您所感興趣的斷點數量
你的GDB fu明顯比我的好。我建議的「髒」解決方案適用於無法調用任意函數的調試器,但我想這在這種情況下是不相關的。 – Clifford 2011-06-04 06:46:41
設置breakboint地址。在malloc或靜態創建數組的地方獲取數組的地址,並在地址處設置斷點。
休息*地址
A「髒」的方法「於addr設置斷點」是修改程序計數器寄存器到一個位置的地址,你的代碼中顯示功能是調用。確保在調用之後設置斷點,以便您可以將程序計數器恢復爲其原始值,如果您希望代碼在此後繼續正確運行。
即使更髒,如果函數不帶參數,也是將程序計數器設置爲函數中第一條指令的地址。在這種情況下,在return語句中放置一個斷點並在那裏恢復程序計數器,否則返回將返回到第一個斷點函數的調用者,這可能不是您想要的。這就是說,調試器完全能夠通過「watch」顯示數組內容,所以除非內容需要特定的解釋來理解它,否則這肯定會是一個更好的方法嗎?
另一個非調試器解決方法是將數組實現爲內存映射文件或共享內存,然後使用單獨的進程映射和顯示相同的文件或內存。這種技術將是操作系統特定的。
- 1. 如何修改gdb中的斷點行?
- 2. 如何使用gdb在基類的構造函數處中斷?
- 3. gdb-stub/server如何處理SW斷點?
- 4. 如何使用共享庫函數在gdb中設置斷點
- 5. 如何設置gdb中的python函數的斷點
- 6. 成員函數的C++ GDB斷點
- 7. GDB:運行到特定斷點
- 8. 如何在連接斷點後運行ndk-gdb
- 9. 中斷髮生時使用中斷點時運行與gdb exabatble
- 10. 如何使用gdb中的參數運行程序?
- 11. 如何讓gdb在執行完循環後在斷點處停止n次數
- 12. 如何中斷在qemu + gdb中運行的無限循環?
- 13. 有沒有辦法讓一個應用程序線程在GDB的斷點處繼續運行?
- 14. 如何識別運行中斷處理程序的核心?
- 15. 如何跳轉到gdb中的斷點?
- 16. 如何在Android Studio的斷點之後繼續運行程序?
- 17. 在GDB中命名斷點
- 18. 在GDB中設置斷點
- 19. 在gdb中移動斷點
- 20. GDB:改變正在運行的程序
- 21. 對所有斷點運行一個「斷點命令列表」/遍歷斷點[GDB]
- 22. GDB:僅在命中不同斷點後才斷點的斷點
- 23. gdb,在文件中的所有函數上設置斷點
- 24. 在GDB的每一行設置斷點
- 25. GDB在對象函數調用中斷
- 26. 程序數據隨機化只有在運行中斷點時
- 27. 通過python接口在gdb的斷點處執行命令
- 28. 通過系統執行外部程序時的GDB斷點()
- 29. 如何在gdb中爲函數的所有調用設置斷點?
- 30. gdb:如何確認函數上設置了斷點?
嗯..有無論如何使用該功能?它以更有組織的方式打印出信息。 – hut123 2011-06-04 05:11:19