sim*_*que 2 debugging perl watch
我知道我可以使用w命令为变量和表达式添加监视,是否可以告诉它简单地解析每个命令并停止该命令中是否有某段文本?
像w m/bad command/where这样$_的字符串包含正在执行的下一个命令.
我正在Windows上使用Komodo进行远程CGI调试,但我也可以perl -d在linux shell上使用.
更新:
我会尽量让这个更清楚.有一个文件,磁盘上的数据被删除,我不知道在哪里.我正在调试的程序包含许多彼此需要的.pl文件,而且完整的代码库甚至更大.我当然可以通过这个来获取数据文件名称的一部分(我知道扩展名),或者unlink.但由于我不知道我的程序正在使用哪些代码文件,这不会让我走得太远.
让我们考虑一下这段代码,它将被调试:
if ($foo == 1) {
unlink 'filename.example';
}
Run Code Online (Sandbox Code Playgroud)
现在当我调试这个时,如果下一个即将执行的perl命令(来自脚本)包含/example/,我希望调试器停止.我想要一种在执行下一个命令之前运行的钩子.
这样的话,我也不需要知道那里(在哪一行或文件)的东西,我想打破在是,我也不需要一个变量名(有没有).
我知道这很难解释,但我认为这可能是一个常见的问题.也许完全有另一种方法?
使用'w'命令设置观察点:
BD<1> w $cannonballs
Run Code Online (Sandbox Code Playgroud)
$ cannonballs每次变化都会破坏程序.
BD<1> w $i == 19
Run Code Online (Sandbox Code Playgroud)
当$ i的值设置为19时会中断.例如
$ cat foo.pl
foreach $i ( 0..100 ) {
print "$i\n";
}
$ perl -d foo.pl
Loading DB routines from perl5db.pl version 1.28 Editor support available.
Enter h or `h h' for help, or `man perldebug' for more help.
main::(foo.pl:2): foreach $i ( 0..100 ) {
DB<1> w $i == 3
DB<2> c
0
1
2
Watchpoint 0: $i == 3 changed:
old value: ''
new value: '1'
main::(foo.pl:3): print "$i\n";
DB<2> p $i
3
DB<3> q
Watchpoint 0: $i == 3 changed:
old value: '1'
new value: ''
DB<3> q
$
Run Code Online (Sandbox Code Playgroud)
您可能希望使用变量的完整命名空间,否则在任何具有相同名称的变量进入或超出范围时,您都将获得中断.
| 归档时间: |
|
| 查看次数: |
1333 次 |
| 最近记录: |