Amazon Best VPN GoSearch

OnWorks 网站图标

perldebug - 云端在线

通过 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器在 OnWorks 免费托管服务提供商中运行 perldebug

这是 perldebug 命令,可以使用我们的多个免费在线工作站之一在 OnWorks 免费托管服务提供商中运行,例如 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器

程序:

您的姓名


perldebug - Perl 调试

商品描述


首先,您是否尝试过使用 -w 转变?

如果您是 Perl 调试器的新手,您可能更喜欢阅读 perldebtut,这是一个教程
调试器简介。

波长 XNUMXμm 的 Perl的 调试


如果你调用 Perl -d 切换,您的脚本在 Perl 源代码调试器下运行。
这就像一个交互式 Perl 环境,提示调试器命令,让
您检查源代码,设置断点,获取堆栈回溯,更改
变量等。这非常方便,以至于您经常自己启动调试器
只是为了以交互方式测试 Perl 构造以查看它们的作用。 例如:

$ perl -d -e 42

在 Perl 中,调试器不是一个单独的程序,它通常是典型的
编译环境。 相反, -d 标志告诉编译器插入源
信息进入解析树,它即将传递给解释器。 这意味着
您的代码必须首先正确编译,调试器才能对其进行处理。 那么当
解释器启动后,它会预加载一个包含调试器的特殊 Perl 库文件。

程序将停止 before 第一个运行时可执行语句(但见下文
关于编译时语句)并要求您输入调试器命令。 与之相反
流行的期望,每当调试器停止并向您显示一行代码时,它总是
显示它所在的行 关于 执行,而不是刚刚执行的那个。

调试器无法识别的任何命令都作为 Perl 代码直接执行(“eval”)
当前包。 (调试器使用 DB 包来保持自己的状态
信息。)

请注意,所说的“eval”受隐式范围的约束。 因此,任何新推出的
词法变量或任何修改的捕获缓冲区内容在 eval 后丢失。 这
调试器是学习 Perl 的一个很好的环境,但是如果您交互式地尝试使用
应该在同一范围内的材料,将其塞在一行中。

对于在调试器提示符下输入的任何文本,前导和尾随空格是第一位的
在进一步处理之前剥离。 如果调试器命令与
你自己的程序,只是在函数之前加上一些看起来不像
调试器命令,例如前导“;” 或者可能是一个“+”,或者用
括号或大括号。

调用 这些因素包括原料奶的可用性以及达到必要粉末质量水平所需的工艺。 调试
有几种方法可以调用调试器:

perl -d 程序名称
在由“program_name”标识的给定程序上。

perl -d -e 0
使用“-e”交互提供任意“表达式”。

perl -d:ptkdb 程序名称
通过“Devel::ptkdb”GUI 调试给定程序。

perl -dt 线程程序名
使用线程调试给定程序(实验性)。

调试 命令
交互式调试器理解以下命令:

h 打印出摘要帮助消息

h [command] 打印出给定调试器命令的帮助消息。

hh "hh" 的特殊参数产生了整个帮助页面,这相当
长。

如果“hh”命令(或任何命令,就此而言)的输出滚动
通过您的屏幕,在命令前面加上一个管道符号,这样它就
运行你的寻呼机,如

数据库> |hh

您可以更改通过“o pager=...”命令使用的寻呼机。

p expr 与当前包中的“print {$DB::OUT} expr”相同。 特别是,
因为这只是 Perl 自己的“打印”函数,这意味着嵌套数据
与“x”命令不同,结构和对象不会被转储。

“DB::OUT”文件句柄打开为 /开发/ tty, 无论 STDOUT 在哪里
被重定向到。

x [最大深度] expr
在列表上下文中评估它的表达式并将结果转储到一个漂亮的 -
印花时尚。 嵌套的数据结构是递归打印出来的,不像
Perl 中真正的“打印”功能。 转储哈希时,您可能会
更喜欢 'x \%h' 而不是 'x %h'。 如果您想这样做,请参阅 Dumpvalue
你自己。

输出格式由下面描述的多个选项控制
“可配置选项”。

如果包含“maxdepth”,则必须是数字 N; 价值被倾销
仅由 N 级别很深,就好像“dumpDepth”选项已被临时设置为
N.

V [pkg ​​[变量]]
使用数据显示包中的所有(或部分)变量(默认为“main”)
漂亮的打印机(散列显示它们的键和值,以便您查看是什么,
控制字符可打印等)。 确保你没有把
那里的类​​型说明符(如“$”),只是符号名称,如下所示:

V DB 文件名行

使用 "~pattern" 和 "!pattern" 表示正则和负正则表达式。

这类似于在每个适用的 var 上调用“x”命令。

X [vars] 与“V currentpackage [vars]”相同。

y [级别 [变量]]
显示所有(或部分)词法变量(助记符:“mY”变量)
当前范围或 水平 范围更高。 你可以限制你的变量
瓦尔 它的工作原理与“V”和“X”命令完全一样。
需要 0.08 或更高版本的“PadWalker”模块; 如果这会警告
没有安装。 输出以与“V”相同的样式漂亮地打印,并且
格式由相同的选项控制。

T 产生堆栈回溯。 有关其输出的详细信息,请参见下文。

s [expr] 单步。 执行直到另一个语句的开始,降序
进入子程序调用。 如果提供了包含函数的表达式
调用,它也将是单步执行的。

n [expr] 下一步。 在子程序调用上执行,直到下一个开始
陈述。 如果提供了一个包含函数调用的表达式,那些
函数将在每个语句之前停止执行。

r 继续直到从当前子程序返回。 转储返回值
如果设置了“PrintRet”选项(默认)。

重复最后一个“n”或“s”命令。

c [行|子]
继续,可选择在指定的位置插入一个一次性断点
行或子程序。

l 列出下一窗口的行。

l min+incr 列出从“min”开始的“incr+1”行。

l min-max 列出行“min”到“max”。 “l -”与“-”同义。

l line 列出单行。

l subname 列出子程序行的第一个窗口。 子名 可能是一个变量
包含代码参考。

- 列出前一个窗口的行。

v [line] 查看当前行周围的几行代码。

. 将内部调试器指针返回到上次执行的行,并打印出来
那条线。

f filename 切换到查看不同的文件或“eval”语句。 如果 文件名 是不是一个
在 %INC 的值中找到的完整路径名,它被视为正则表达式。

“eval”ed 字符串(当可访问时)被认为是文件名:“f(eval
7)" 和 "f eval 7\b" 访问第 7 个 "eval"ed 字符串的主体(按顺序)
执行)。 当前执行的“eval”和“eval”ed的主体
定义子程序的字符串被保存并因此可访问。

/pattern/ 向前搜索模式(Perl 正则表达式); 最后的 / 是可选的。 搜索
默认情况下不区分大小写。

?图案? 向后搜索模式; 最后 ? 是可选的。 搜索是 case-
默认不敏感。

L [abw] 列出(默认全部)动作、断点和观察表达式

S [[!] 正则表达式]
列出与正则表达式匹配的子程序名称 [不]。

t [n] 切换跟踪模式(另见“AutoTrace”选项)。 可选参数是
在当前级别之下跟踪的最大级别数; 任何比
那将是沉默的。

t [n] expr 跟踪“expr”的执行。 可选的第一个参数是最大值
要跟踪的级别数低于当前级别; 比这更深的东西
会沉默。 请参阅 perldebguts 中的“帧列表输出示例”以了解
例子。

b 在当前行设置断点

b [行] [条件]
在给定的行之前设置一个断点。 如果指定了条件,则为
每次到达语句时进行评估:仅在以下情况下才采用断点
条件为真。 断点只能设置在开头的行上
可执行语句。 条件不使用“if”:

b 237 $x > 30
b 237 ++$count237 < 11
b 33 /模式/我

如果行号为“.”,则在当前行设置断点:

乙。 $n > 100

b [文件]:[行] [条件]
在(可能不同的)文件中的给定行之前设置断点。 如果一个
条件被指定,每次到达语句时都会对其进行评估:
仅当条件为真时才采用断点。 断点可能只有
在开始可执行语句的行上设置。 条件不使用“if”:

b lib/MyModule.pm:237 $x > 30
b /usr/lib/perl5/site_perl/CGI.pm:100 ++$count100 < 11

b 子名 [条件]
在命名子例程的第一行之前设置断点。 子名 五月
是一个包含代码引用的变量(在这种情况下 流程条件 是不是
支持的)。

b 推迟子名称 [条件]
子程序编译后在第一行设置断点。

b 加载文件名
在第一个执行的行之前设置断点 文件名,应该
是在 %INC 值中找到的完整路径名。

b 编译子名
在指定之后执行的第一条语句之前设置断点
子程序被编译。

B行从指定的删除断点 线.

B * 删除所有已安装的断点。

禁用 [文件]:[行]
禁用断点,这样它就不会停止程序的执行。
断点默认启用,可以使用“启用”重新启用
命令。

禁用 [行]
禁用断点,这样它就不会停止程序的执行。
断点默认启用,可以使用“启用”重新启用
命令。

这是针对当前文件中的断点完成的。

启用 [文件]:[行]
启用断点,以便停止程序的执行。

启用 [行]
启用断点,以便停止程序的执行。

这是针对当前文件中的断点完成的。

[行] 命令
设置在执行该行之前要完成的操作。 如果 线 省略,设置
即将执行的行上的一个动作。 采取的步骤顺序
调试器是

1.在这一行检查断点
2. 如有必要,打印该行(跟踪)
3. 执行与该行相关的任何操作
4.提示用户是否在断点或单步
5. 评价线

例如,这将在每次第 53 行通过时打印出 $foo:

a 53 打印 "DB FOUND $foo\n"

一行 从指定的行中删除一个动作。

A * 删除所有已安装的操作。

w expr 添加一个全局观察表达式。 每当被监视的全局更改调试器时
将停止并显示旧值和新值。

W expr 删除 watch-expression

W * 删除所有监视表达式。

o 显示所有选项。

o 布尔选项 ...
将每个列出的布尔选项设置为值 1。

o 任何选项? ...
打印出一个或多个选项的值。

o 选项=值 ...
设置一个或多个选项的值。 如果值有内部空格,
它应该被引用。 例如,您可以设置 "o pager="less -MQeicsNfr""
打电话 使用这些特定选项。 您可以使用单人或双人
引号,但如果你这样做,你必须转义相同类型的任何嵌入实例
你开始的引用,以及任何立即转义的任何转义
在该引用之前,但并不意味着要逃避引用本身。 在
换句话说,无论引用如何,您都遵循单引号规则; 自我
option='这还不错'" 或 "o option="她说,\"不是吗?\"""。

由于历史原因,“=value”是可选的,但仅在以下情况下默认为 1
这样做是安全的——也就是说,主要用于布尔选项。 总是更好
使用“=”分配特定值。 “选项”可以缩写,但
为清楚起见,可能不应该。 多个选项可以一起设置。 看
这些列表的“可配置选项”。

< ? 列出所有预先提示的 Perl 命令操作。

< [命令]
设置一个动作(Perl 命令)在每个调试器提示之前发生。 一个多
可以通过反斜线换行来输入 line 命令。

< * 删除所有预先提示的 Perl 命令操作。

<< 命令在每个调试器提示之前添加一个动作(Perl 命令)。 一个多
可以通过回退换行符来输入 line 命令。

> ? 列出提示后的 Perl 命令操作。

> command 设置一个动作(Perl 命令)在你刚刚给出的提示之后发生
返回执行脚本的命令。 多行命令可能是
通过反斜线换行输入(我们打赌你不可能猜到这一点
现在)。

> * 删除所有的 post-prompt Perl 命令操作。

>> 命令添加一个动作(Perl 命令),当你刚刚
给出了返回执行脚本的命令。 多行命令可能
通过反斜线换行来输入。

{ ? 列出提示前调试器命令。

{ [ 命令 ]
设置一个动作(调试器命令)在每个调试器提示之前发生。 一个
可以按习惯方式输入多行命令。

因为这个命令在某种意义上是新的,如果你出现会发出警告
不小心进入了一个块。 如果这就是你的意思,
把它写成 ";{ ... }" 甚至 "do { ... }"。

{ * 删除所有预提示调试器命令。

{{ command 在每个调试器提示之前添加一个动作(调试器命令)。 一种
可以输入多行命令,如果您能猜到如何输入:见上文。

! number 重做上一个命令(默认为上一个命令)。

! -number 重做第一个命令。

! 模式 重做以模式开头的最后一个命令。 另请参阅“o回忆命令”。

!! cmd 在子进程中运行 cmd(从 DB::IN 读取,写入 DB::OUT)参见“o
shellBang”,同样。请注意用户当前的 shell(好吧,他们的 $ENV{SHELL}
变量)将被使用,这会干扰退出的正确解释
状态或信号和核心转储信息。

源文件从 文件. 文件 可能本身包含
“源”命令。

H -number 显示最后 n 个命令。 仅列出长度超过一个字符的命令。
If 省略,一一列举。

q 或 ^D 退出。 (“退出”对此不起作用,除非您已创建别名)这是
唯一支持的退出调试器的方式,尽管键入“exit”两次可能
工作。

如果您希望能够离开结尾,请将“inhibit_exit”选项设置为 0
剧本。 如果您想步进,您可能还需要将 $finished 设置为 0
通过全球破坏。

R 通过“exec()”新会话重新启动调试器。 我们努力维护您的
历史记录,但内部设置和命令行选项可能是
丢失。

当前保留以下设置:历史记录、断点、操作、
调试器选项和 Perl 命令行选项 -w, -I-e.

|dbcmd 运行调试器命令,管道 DB::OUT 到您当前的寻呼机。

||dbcmd 与 "|dbcmd" 相同,但 DB::OUT 也被临时 "select"ed。

= [别名值]
定义命令别名,例如

= 退出 q

或列出当前别名。

command 作为 Perl 语句执行命令。 将提供尾随分号。
如果 Perl 语句会与 Perl 调试器混淆,请使用
前导分号也是。

m expr 列出可以对计算表达式的结果调用哪些方法。
该表达式可以评估为对受祝福对象的引用,或对
包裹名字。

M 显示所有加载的模块及其版本。

人 [手册页]
尽管它的名字,这会调用系统默认的文档查看器
给定页面,或者在查看器本身上,如果 联机帮助页 被省略。 如果那个观众是
男子,当前的“Config”信息用于调用 男子 使用适当的
MANPATH 或 -M 人行道 选项。 匹配的“XXX”形式的查找失败
已知的表单联机帮助页 xxx 将被重试。 这使您可以键入“man
debug" 或 "man op" 来自调试器。

在传统上没有可用的系统上 男子 命令,调试器调用
文件. 有时这个决定是不正确的,因为顽固
供应商,或者更准确地说,是对有进取心的用户。 如果你陷入
任一类别,只需手动将 $DB::doccmd 变量设置为任何查看器
查看系统上的 Perl 文档。 这可以在 rc 文件中设置,
或通过直接分配。 我们仍在等待一个工作示例
类似的东西:

$DB::doccmd = 'netscape -remote http://something.here/';

配置 可选项
调试器有许多可使用“o”命令设置的选项,无论是交互方式还是
来自环境或 rc 文件。 (./.perldb 或 〜/.perldb 在 Unix 下。)

“召回命令”,“ShellBang”
用于调用命令或生成 shell 的字符。 默认情况下,两者
被设置为“!”,这是不幸的。

“pager”程序用于输出寻呼管道命令(那些以“|”开头的命令)
字符。)默认情况下,将使用 $ENV{PAGER}。 因为调试器使用
您当前的粗体和下划线的终端特征,如果选择
寻呼机不通过不变的转义序列,某些的输出
通过寻呼机发送时,调试器命令将不可读。

"tkRunning" 在提示时运行 Tk(使用 ReadLine)。

“信号电平”、“警告电平”、“死电平”
详细程度。 默认情况下,调试器会留下您的异常并
单独警告,因为更改它们会破坏正确运行的程序。
当未捕获到 INT、BUS 或 SEGV 信号时,它将尝试打印一条消息
到达。 (但请参阅下面“BUGS”中对信号的提及。)

要禁用此默认安全模式,请将这些值设置为高于
0. 在级别 1 时,您会在收到任何类型的警告时获得回溯
(这通常很烦人)或例外(这通常很有价值)。
不幸的是,调试器无法区分致命异常和非致命异常
那些。 如果“dieLevel”甚至是 1,那么您的非致命异常也会被追踪
如果它们来自“评估”的字符串或任何
您尝试加载的模块中的“评估”类型。 如果“dieLevel”为 2,
调试器不在乎它们来自哪里:它篡夺了您的异常
处理程序并打印出跟踪,然后用自己的修改所有异常
点缀。 这可能对某些跟踪目的有用,但是
倾向于无可救药地破坏任何接受其异常处理的程序
认真。

“AutoTrace”跟踪模式(类似于“t”命令,但可以放入“PERLDB_OPTS”)。

"LineInfo" 用于打印行号信息的文件或管道。 如果它是一个管道(比如,
"|visual_perl_db"),然后使用一条短消息。 这是使用的机制
与从属编辑器或可视化调试器交互,例如特殊的“vi”
或“emacs”挂钩,或“ddd”图形调试器。

“禁止退出”
如果为 0,则允许 加强 折扣 脚本的结尾。

“PrintRet” 如果设置(默认),则在“r”命令后打印返回值。

"ornaments" 影响命令行的屏幕外观(参见 Term::ReadLine)。 有
目前无法禁用这些,这会使某些输出难以辨认
一些显示器,或一些寻呼机。 这被认为是一个错误。

“frame” 影响进入和退出子程序时的消息打印。 如果
“frame & 2”为假,仅在输入时打印消息。 (退出时打印
如果穿插其他消息可能会有用。)

如果是“frame & 4”,则打印函数的参数,加上上下文和调用者
信息。 如果“frame & 8”,重载的“stringify”和“tie”d“FETCH”被启用
打印的参数。 如果是“frame & 16”,子程序的返回值
被打印。

参数列表被截断的长度由下一个控制
选项​​:

“最大跟踪长度”
设置“frame”选项的第 4 位时截断参数列表的长度。

“窗口大小”
更改代码列表窗口的大小(默认为 10 行)。

以下选项会影响“V”、“X”和“x”命令发生的情况:

“阵列深度”,“哈希深度”
仅打印前 N 个元素(全部为 '')。

"dumpDepth" 倾倒结构时将递归深度限制为 N 级。 负值
被解释为无穷大。 默认值:无穷大。

"compactDump", "veryCompact"
更改数组和哈希输出的样式。 如果是“compactDump”,短数组可能
打印在一行上。

"globPrint" 是否打印 globs 的内容。

“转储数据库文件”
转储保存调试文件的数组。

“转储包”
转储包的符号表。

“转储重用”
转储“重用”地址的内容。

“引用”、“HighBit”、“undefPrint”
更改字符串转储的样式。 “quote”的默认值为“auto”; 一
可以通过将其设置为 """ 来启用双引号或单引号格式或
“'“, 分别。 默认情况下,打印设置了高位的字符
逐字。

“UsageOnly”基本的每包内存使用转储。 计算字符串的总大小
在包中的变量中找到。 这不包括词法
模块的文件范围,或在闭包中丢失。

"HistFile" 历史记录所在文件的路径(假设有一个可用的 Term::ReadLine
后端)将在调试器启动时读取,并将保存到
关机时(用于跨会话的持久性)。 在概念上类似于 Bash
“.bash_history”文件。

“HistSize” 历史记录中保存的行数(假设上面的“HistFile”)。

读取rc文件后,调试器读取$ENV{PERLDB_OPTS}环境变量
并将其解析为“O ...”行的其余部分,因为人们可能会在调试器中输入
迅速的。 您可以放置​​初始化选项“TTY”、“noTTY”、“ReadLine”和
“NonStop”在那里。

如果您的 rc 文件包含:

parse_options("NonStop=1 LineInfo=db.out AutoTrace");

那么您的脚本将在没有人工干预的情况下运行,将跟踪信息放入
文件 数据库输出. (如果你打断它,你最好将“LineInfo”重置为 /开发/ tty 如果你
希望看到任何东西。)

"TTY" 用于调试 I/O 的 TTY。

“noTTY” 如果设置,调试器将进入“NonStop”模式并且不会连接到 TTY。
如果被中断(或者如果控制通过显式设置转到调试器
$DB::signal 或 $DB::single 来自 Perl 脚本),它连接到 TTY
在启动时在“TTY”选项中指定,或在运行时使用
您选择的“Term::Rendezvous”模块。

这个模块应该实现一个名为“new”的方法,该方法返回一个对象
两种方法:“IN”和“OUT”。 这些应该返回文件句柄用于
相应地调试输入和输出。 “新”方法应该检查
启动时包含 $ENV{PERLDB_NOTTY} 值的参数,或
"$ENV{HOME}/.perldbtty$$" 否则。 未检查此文件是否正确
所有权,因此理论上可能存在安全隐患。

"ReadLine" 如果为 false,则调试器中的 readline 支持将被禁用以进行调试
本身使用 ReadLine 的应用程序。

"NonStop" 如果设置,调试器进入非交互模式直到被中断,或者
通过设置 $DB::signal 或 $DB::single 以编程方式。

这是使用 $ENV{PERLDB_OPTS} 变量的示例:

$ PERLDB_OPTS="NonStop frame=2" perl -d myprogram

这将运行脚本 我的程序 无需人工干预,打印出调用树
带有入口和出口点。 注意“NonStop=1 frame=2”等价于“N f=2”,并且
最初,选项可以由第一个字母唯一地缩写(模
“转储*”选项)。 尽管如此,建议您始终完整地拼写出来
为易读性和未来的兼容性。

其他例子包括

$ PERLDB_OPTS="NonStop LineInfo=listing frame=2" perl -d myprogram

它以非交互方式运行脚本,将每个条目的信息打印到子例程和
每个执行的行到名为的文件中 清单. (如果你打断它,你最好
将“LineInfo”重置为“交互式”的东西!)

其他示例包括(使用标准 shell 语法来显示环境变量
设置):

$ ( PERLDB_OPTS="NonStop frame=1 AutoTrace LineInfo=tperl.out"
perl -d 我的程序)

这对于调试使用“Term::ReadLine”本身的程序可能很有用。 不要
忘记从对应的窗口中的 TTY 中分离您的外壳 /开发/ ttyXX,
说,通过发出类似的命令

$ 睡眠 1000000

有关详细信息,请参阅 perldebguts 中的“调试器内部”。

调试 输入输出
提示 调试器提示类似于

数据库<8>

甚至

数据库<<17>>

该数字是命令编号,您将使用它来访问
内建的 长山壕- 类似历史机制。 例如,“!17”会重复命令
17.尖括号的深度表示嵌套的深度
调试器。 例如,如果您愿意,您可以获得不止一组括号
已经在断点处,然后打印本身的函数调用的结果
有一个断点,或者你通过“s/n/t expression”命令进入一个表达式。

多行命令
如果要输入多行命令,例如带有
几个语句或格式,转义通常会结束的换行符
带反斜杠的调试器命令。 下面是一个例子:

DB<1> for (1..4) { \
续:打印“ok\n”; \
续:}
ok
ok
ok
ok

请注意,这种转义换行符的业务特定于交互式命令
输入调试器。

堆栈回溯
这是通过“T”命令进行堆栈回溯的示例:

$ = main::infested 从文件“Ambulation.pm”第 10 行调用
@ = Ambulation::legs(1, 2, 3, 4) 从文件“camel_flea”第 7 行调用
$ = main::pests('bactrian', 4) 从文件 'camel_flea' 第 4 行调用

左边的字符表示函数所在的上下文
被调用,“$”和“@”分别表示标量或列表上下文,“.”
意思是空上下文(实际上是一种标量上下文)。 显示器
上面说你在运行堆栈时在函数“main::infested”中
dump,并且它是在文件第 10 行的标量上下文中调用的
走动.pm,但根本没有任何参数,这意味着它被称为
&出没。 下一个堆栈帧显示函数“Ambulation::legs”是
在列表上下文中调用 骆驼跳蚤 带有四个参数的文件。 最后
堆栈帧显示在标量上下文中调用了“main::pests”,也来自
骆驼跳蚤,但从第 4 行开始。

如果从活动的“use”语句中执行“T”命令,则
回溯将包含一个“要求”框架和一个“评估”框架。

行列表格式
这显示了“l”命令可以产生的输出类型:

DB<<13>> l
101:@i{@i} = ();
102:b @isa{@i,$包} = ()
103 如果(存在 $i{$prevpack} || 存在 $isa{$pack});
104}
105
106下一个
107==> 如果(存在 $isa{$pack});
108
109:a if ($extra--> 0) {
110: %isa = ($pack,1);

可断行用“:”标记。 带有断点的行用“b”和
那些有“a”动作的人。 将要执行的行被标记为
“==>”。

请注意,调试器列表中的代码可能与您的
原始源代码。 行指令和外部源过滤器可以改变
Perl 看到它之前的代码,导致代码从其原始位置移动或采取
以完全不同的形式。

帧列表
当设置了“frame”选项时,调试器将打印输入(和可选的
退出)不同风格的子程序。 看到 perldebgut 难以置信的长
这些的例子。

调试 编译时 声明
如果您有编译时可执行语句(例​​如 BEGIN、UNITCHECK 和
CHECK 块或“使用”语句),这些将 而不去 被调试器停止,虽然
“require”s 和 INIT 块会,并且编译时语句可以用
在“PERLDB_OPTS”中设置的“AutoTrace”选项)。 但是,从您自己的 Perl 代码,您可以
使用以下语句将控制权转移回调试器,如果
调试器没有运行:

$DB::单 = 1;

如果将 $DB::single 设置为 2,则相当于刚刚输入了“n”命令,而
值为 1 表示“s”命令。 $DB::trace 变量应设置为 1 以
模拟输入了“t”命令。

调试编译时代码的另一种方法是启动调试器,在
加载 一些模块:

DB<7> b 加载 f:/perllib/lib/Carp.pm
将在加载 'f:/perllib/lib/Carp.pm' 时停止。

然后使用“R”命令(如果可能)重新启动调试器。 一个可以使用"b compile
子名称”用于相同的目的。

调试 产品定制
调试器可能包含足够的配置钩子,你永远不必
自己修改。 您可以在调试器中更改调试器的行为
使用它的“o”命令,从命令行通过“PERLDB_OPTS”环境变量,
和来自自定义文件。

您可以通过设置一个 .perldb 文件,其中包含初始化
代码。 例如,您可以创建这样的别名(最后一个是人们期望的
到那里):

$DB::alias{'len'} = 's/^len(.*)/p length($1)/';
$DB::alias{'stop'} = 's/^stop (at|in)/b/';
$DB::alias{'ps'} = 's/^ps\b/p 标量 /';
$DB::alias{'quit'} = 's/^quit(\s*)/exit/';

您可以从 .perldb 通过使用这样的调用;

parse_options("NonStop=1 LineInfo=db.out AutoTrace=1 frame=2");

代码在包“DB”中执行。 注意 .perldb 之前处理
处理“PERLDB_OPTS”。 如果 .perldb 定义子程序“afterinit”,该函数是
在调试器初始化结束后调用。 .perldb 可能包含在当前
目录,或在主目录中。 因为这个文件是由 Perl 提供的,并且可能
包含任意命令,出于安全原因,它必须由超级用户或
当前用户,只能由其所有者写入。

您可以通过向@DB::typeahead 添加任意命令来模拟调试器的 TTY 输入。 为了
例如,你的 .perldb 文件可能包含:

sub afterinit { push @DB::typeahead, "b 4", "b 6"; }

这将尝试在调试器之后立即在第 4 行和第 6 行设置断点
初始化。 请注意,@DB::typeahead 不是受支持的接口,受制于
未来版本的变化。

如果要修改调试器,复制 perl5db.pl 从 Perl 库到另一个名字
并尽情享受。 然后你需要设置你的“PERL5DB”环境
变量说这样的话:

开始{需要“myperl5db.pl”}

作为最后的手段,您还可以使用“PERL5DB”直接通过以下方式自定义调试器
设置内部变量或调用调试器函数。

请注意,本文档(或
perldebguts) 仅供内部使用,因此可能会发生变化
不知不觉中。

Readline库 支持 / 发展历程 in 这些因素包括原料奶的可用性以及达到必要粉末质量水平所需的工艺。 调试
交付时,提供的唯一命令行历史记录是一个简单的检查
领先的感叹号。 但是,如果您安装了 Term::ReadKey 和 Term::ReadLine
来自 CPAN 的模块(例如 Term::ReadLine::Gnu、Term::ReadLine::Perl 等),您将拥有
完整的编辑功能很像那些 GNU 的ReadLine(3)规定。 寻找这些在
模块/按模块/术语 CPAN 上的目录。 这些不支持正常 vi 命令行
编辑,但是。

还可以使用基本的命令行补全,包括词法变量
如果安装了“PadWalker”模块,则为当前范围。

如果没有 Readline 支持,您可能会看到符号“^[[A”、“^[[C”、“^[[B”、“^[[D””、“^H”、
... 使用箭头键和/或退格键时。

编者 支持 HPMC胶囊 调试
如果你有 GNU 的版本 emacs的 安装在您的系统上,它可以与
Perl 调试器提供了一个集成的软件开发环境,让人联想到它
与 C 调试器的交互。

最新版本的 Emacs 附带了一个开始文件,用于制作 emacs的 表现得像一个语法 -
理解(一些)Perl 语法的定向编辑器。 参见 perlfaq3。

用户 vi 还应该调查 VIM格维姆,老鼠和风的版本,用于着色
Perl 关键字。

请注意,只有 perl 可以真正解析 Perl,因此所有此类 CASE 工具都有些不足
标记,特别是如果您不像 C 程序员那样编写 Perl。

波长 XNUMXμm 的 Perl的 探查
如果您希望为 Perl 运行提供替代调试器,请使用
冒号和一个包参数给 -d 旗帜。 Perl 的替代调试器包括
Perl 分析器,Devel::NYTProf,作为 CPAN 发行版单独提供。 到
在文件中配置您的 Perl 程序 代码文件,只需输入:

$ perl -d:NYTProf mycode.pl

当脚本终止时,分析器将创建一个配置文件信息的数据库
您可以使用分析器的工具将其转换为报告。 看详情。

调试 原价 表达式


"use re 'debug'" 使您能够看到 Perl 正则表达式的详细信息
发动机工作。 为了理解这一典型的大量输出,人们不仅必须
对正则表达式匹配的一般工作原理有一些了解,但也知道如何
Perl 的正则表达式在内部被编译成一个自动机。 这些事情是
在 perldebguts 的“调试正则表达式”中详细探讨了一些细节。

调试 内存 用法


Perl 包含对报告其自身内存使用情况的内部支持,但这是一个相当
高级概念,需要对内存分配的工作原理有所了解。 看
有关详细信息,请参阅 perldebguts 中的“调试 Perl 内存使用情况”。

使用 onworks.net 服务在线使用 perldebug


免费服务器和工作站

下载 Windows 和 Linux 应用程序

Linux 命令

Ad




×
广告
❤️在这里购物、预订或购买——免费,有助于保持服务免费。