使用Perl調試器,我知道我可以使用b
命令在某些代碼行處設置斷點。一旦變量的內容發生變化,我能否讓調試器停止工作?如何在Perl調試器中監視表達式的更改?
3
A
回答
13
您可以使用Perl調試器中的w
命令創建觀察點。
w
調試命令
速成班:
通過鍵入w
創建觀察表達式,然後表達式將更改監控:
DB<1> w $variablename
輸入c
繼續,直到看着表情變化。一旦你這樣做,你會得到的輸出與此類似:
DB<2> c
Watchpoint 0: $variablename changed:
old value: ''
new value: 'hi'
main::(ex.pl:6): $variablename = "";
注意調試器停在之後的改變已經發生,太行顯示的可能是不相關的,在所有的聲明。
另請注意,該表達式爲stringdered。因此,例如,改變一個變量來undef
會給你這樣的輸出:
DB<2> c
Watchpoint 0: $variablename changed:
old value: 'hi'
new value: ''
main::(ex.pl:7): $variablename = undef;
如果變量隨後被更改爲空字符串,調試器將不會停止,因爲字符串化的空字符串,字符串化的民主基金是視爲等於。
如果監視表達式是一個列表,調試器會比較列表的字符串化元素:
DB<1> w $variablename, "second"
DB<2> c
Watchpoint 0: $variablename, "second" changed:
old value: 'one', 'second'
new value: 'two', 'second'
main::(hi.pl:6): $variablename = "three";
可使用數組變量或哈希變量表表達式,它們將被視爲任何其他名單。
要刪除手錶表達式,請使用W
命令,並查看活動手錶表達式的列表,請使用L
命令。
提示:使用臨時全局變量
由於手錶的表達與每條語句重新評估,你不能指望一個使用詞法變量制定的範圍手錶的表達。一個快速提示是建立一個全球性的參考詞彙,並跟蹤,而不是:
DB<1> $main::my_debug_variable = $hashref_lexical_variable
DB<2> w $main::my_debug_variable->{key_im_watching}
提示:使用Data::Dumper
使用Data::Dumper
觀看非標量的內容:
DB<1> w Data::Dumper->Dump([$hashref])
這比簡單的w $hashref
更可取,因爲它會在散列值發生變化時停止,而不僅僅是引用指向的地址(因爲散列引用字符串化爲HASH(0x2a07a90)
)。
0
此外,您可以在Linux中使用"ddd your_script.pl&"
,並在GUI中監視像C/C++調試器這樣的變量。
相關問題
- 1. Oracle表更改監視器
- 2. 調試Perl的正則表達式
- 3. jQuery監視器表的更改?
- 4. Visual Studio 2015遠程調試器沒有任何調試器成員或監視表達式返回值
- 5. 在perl中的一行中更改幾個表達式
- 6. 如何監視[NSCursor currentCursor]中的更改?
- 7. 如何監視網站中的更改?
- 8. 如何使用Perl更改$ word的正則表達式?
- 9. WMI:監視器註冊表更改
- 10. php在eclipse中調試:xdebug監視表達式<未初始化>
- 11. 更改監視器目錄
- 12. 在Perl中更改默認的正則表達式行爲?
- 13. 像iOS監視器一樣用於調試的Android監視器?
- 14. 如何在Eclipse中使用外部類監視表達式,java
- 15. 如何在角度指令中使用回調作爲監視表達式?
- 16. 在python調試器中交互式監視代碼pdb
- 17. 如何從Perl調試器更改腳本參數
- 18. 如何評估Fortran調試器idb中的表達式
- 19. perl - 監視器文件夾,並等待更改完成
- 20. 如何在調試器模式下運行perl測試?
- 21. 如何監視文件的更改?
- 22. 如何監視Python文件的更改?
- 23. 如何監視Windows目錄的更改?
- 24. 調試器如何從代碼行中查找表達式
- 25. 如何使用Perl在URL中添加過濾器表達式?
- 26. 更改表達式
- 27. 如何在PostgreSQL中調試公用表表達式?
- 28. 如何在Python中監視目錄中的更改?
- 29. 是否有Perl POE模塊用於監視數據庫表中的更改?
- 30. 使用Perl正則表達式+更改#定義和#undef在C++
最後兩個提示都很棒! – sferencik