在Linux中使用Valgrind或任何其他調試器,如何查看變量被修改的位置。我正在使用gcc。請注意,我不想使用gdb進入代碼。我只想運行該程序並讓調試器最終報告我,在代碼中修改變量的地方。檢查變量何時被修改
回答
使用Breakpoint Command Lists在gdb中執行此操作。你將不得不知道要觀看的變量的地址。設置觀察點,像這樣的一系列命令:
watch *0xfeedface commands silent bt cont end
您也可以選擇保存所有這些輸出到日誌文件。查看gdb doc瞭解更多詳情。
嗯,想想它不是確切Can I set a breakpoint on 'memory access' in GDB?的副本,因爲它要求多一點。所以:
- 用GDB
- 找到要觀看(硬件觀察點只爲看地址工作,所以你必須把它運行到變量或對象實例化點的地址,把他們的地址和該地址使用
watch
命令 - 附加命令的地址給你(你需要收集或任何其他信息)回溯,繼續
所以你必須像。:
p &variable
watch *$$
cmd
bt
c
end
(我不完全確定與$$
,我通常使用的$n
由p
命令作爲打印)。
如果變量在許多地方被修改(比如說,在一個緊密的循環中),這將會*不可耐受*慢。如果這是你的最後手段,我會說只使用這種方法。 –
假設你想跟隨變量的變化,這並不是很慢,因爲上面的觀察點通常是硬件觀察點。軟件觀察點(例如,觀看t [i])速度要慢得多...... –
@BasileStarynkevitch:如果你添加'cmd/bt/c/end',它會*變慢。這是印刷回溯減慢它,而不是觀察點。 –
- 1. 如何檢查PDF是否被修改
- 2. C++:類變量如何被修改?
- 3. Django的 - 在基本模板檢查變量被修改通過查看功能
- 4. 如何檢查VBA模塊何時被修改?
- 5. Eclipse CDT:如何查找所有變量被修改的位置
- 6. ng-repeat無法反映源變量何時被修改
- 7. 檢查文件是否已被修改
- 8. 檢查字段是否已被修改
- 9. 檢查位圖是否已被修改
- 10. 檢查網頁是否已被修改
- 11. 檢查EditText是否被修改
- 12. 共享變量沒有被修改
- 13. 檢測變量是否在XX秒內未被修改
- 14. 批量檢查單個文件是否被修改
- 15. 檢索修改的變量值
- 16. 當cx被修改時TASM檢查參數
- 17. tkinter:檢查修改
- 18. 檢查類是否存在變量,如果是,請修改此變量的值
- 19. 當檢索對象被修改時,應用程序對象被修改
- 20. 修改fulfillment.tracking_url變量?
- 21. 修改$ PATH變量
- 22. 使用變量修改XDocument查詢
- 23. 檢查頁面改變時
- 24. 檢查變量是否已被追加
- 25. 檢查JSON文件被修改或新的項目被編程
- 26. 臨時修改全局變量
- 27. 同時不修改NODE_ENV變量
- 28. 如何檢查對象是否被修改
- 29. 如何檢查PictureBox的圖像是否已被修改?
- 30. 如何檢查文件是否被修改與jQuery
[我可以在GDB的'內存訪問'中設置斷點?](http://stackoverflow.com/questions/58851/can-i-set-a-breakpoint-on-memory-access- in-gdb) – bobbymcr