2014-01-24 60 views

回答

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

最後兩個提示都很棒! – sferencik

0

此外,您可以在Linux中使用"ddd your_script.pl&",並在GUI中監視像C/C++調試器這樣的變量。

相關問題