如果我爲當前範圍的本地變量設置了一個觀察點,那麼當它離開範圍時它將被自動刪除。有什麼辦法可以設置一次,並保持它在任何時候進入相同的範圍自動活着?如何在本地作用域變量上設置持久性和條件觀察點?
有無論如何設置有條件的觀察點,如
watch var1 if var1==0
?在我的情況下,條件不起作用。只要var1
的值發生變化,gdb就會停止,而不是直到var1 == 0
爲真。我的gdb是GNU gdb 6.8-debian。
回答
我不知道我們所使用的語言,所以確切的答案會有所不同,但你可以改變的變量是靜態的,全局或動態分配(以及不自由當函數返回時?)。這樣它的原始地址不會改變,並且gdb可以在其上斷點。
而不是觀察值是否等於特定值;您應該在要檢查
var1
的值的行上設置條件斷點。這應該實際上具有相同的效果
例如,
(gdb) break main.c:123 if (var1 == 0)
我同意戴夫有條件的斷點是要走的路。
但是,要做你所問的問題,你可以使用GDB的commands
命令來設置一個GDB命令列表,以便在命中斷點時執行。我覺得這非常有用。
我建議您將GDB命令寫入文件,以便易於編輯,並且易於使用source
命令重新加載。或者,您可以指定要在GDB命令行上加載的命令文件,或使用.gdbinit使它們自動加載。
良好的使用commands
的例子:
假設我有一個函數format
由很多其他的功能調用。我想打破它,但只有在功能do_step_3
被調用後。
break do_step_3
commands
break format
continue
end
您可以使用此爲您的問題是這樣的:
break func
commands
watch var
continue
end
優秀點!謝謝! – Tim 2009-08-31 11:26:34
您可以在您使用斷點做同樣的方式觀察點設置條件。這是in the documentation,但無可否認,它幾乎沒有引起人們的注意。
因此watch my_var if my_var > 3
工作得很好,正如condition
命令一樣。
如果正在監視的變量超出範圍,請重新創建監視點,讓gdb在函數開始時使用斷點自動執行此操作,如Zan所述。
您可以通過將觀察點設置爲內存地址來設置不超出範圍的觀察點。
(gdb) p &var1
$1 = (int *) 0x41523c0
(gdb) watch *(int *)0x41523c0
Hardware watchpoint 1: *(int *)0x41523c0
這也適用於其他數據類型和指針。
這可能很有用,但在這裏不起作用。局部變量不會在函數調用之間保持相同的地址 - 但其他堆棧變量可能會使用該內存位置... – Nick 2011-10-05 16:54:37
- 1. 在XCode上設置一個觀察全局變量的條件斷點
- 2. 如何在Android上設置持久性憑證持久性
- 3. 在觀察變量的特定值上設置斷點
- 4. 實體框架持久化本地作用域變量?
- 5. 如何在Netbeans中設置觀察點?
- 6. 如何爲實例變量設置觀察點?
- 7. 如何設置一個變量寫入觀察點堆棧
- 8. 在gdb上設置errno的觀察點
- 9. 有條件地設置和有條件地使用變量python
- 10. 如何保持Javascript開發變量的觀察點?
- 11. 設置值前後訪問可觀察變量不起作用
- 12. 上觀察到的變量
- 13. 觀察變量變化不起作用
- 14. 用python瓶子中的before_request掛鉤持久化本地作用域變量
- 15. 如何在dbx中設置硬件觀察點?
- 16. 如何設置從可觀察值到Angular 2中的變量
- 17. 永久性設置配置變量
- 18. 在GDB中設置觀察點
- 19. 無法在GDB中設置觀察點
- 20. 如何在Polymer中設置和取消設置觀察者?
- 21. 如何用PyCharm觀察變量?
- 22. 如何在angularjs中觀察此變量
- 23. 突變觀察點不起作用
- 24. PHP變量持久性
- 25. JavaScript初始變量和持久性
- 26. 如何在arquillian持久性擴展上設置IDataTypeFactory
- 27. 如何在Android上設置Firebase存儲的持久性?
- 28. HDInsight持久性Hive設置
- 29. 在Xcode中觀察變量
- 30. 在Linux中觀察變量
我正在使用C++。我使用watchpoint超過斷點,因爲代碼中可能有很多地方會改變變量的值。所以將斷點添加到每個地方是不現實的。我想看看是否可以設置條件觀察點。 – Tim 2009-08-31 00:52:19