2011-04-22 73 views
1

我運行Perl的ptkdb調試器。 我正在腳本內使用system()運行腳本;功能。 但是我不能進入系統調用,調試器只是跳過它。 如何讓調試器實際調試系統調用中發生了什麼?perl ptkdb進入系統調用

回答

2

system()將進程分叉並將其作爲shell命令運行。 Perl調試器不會從Perl父進程到分叉shell命令。

步驟,你可以用它來調試此部分:

1)你可以調試外殼調用自身,它是做你期待什麼呢? (手動運行,從strace/dtrace運行它)

2)您可以打印您發送給它的任何變量。你的變量是否正確傳遞?

3)你可以檢查命令的返回,看它是否正在做你想做的。

另外,你確定system()是你想要的嗎?從系統的perldoc:

這不是你要使用 捕獲輸出從命令, ,你應該使用什麼只是反引號 或QX //,如 perlop中的STRING描述。 -1的返回值表示 未能啓動程序或等待(2)系統調用 (檢查$!出於該原因)的 錯誤。

+0

是的,我確定它是我想要的,有時它需要創建子進程,然後能夠方便的調試它們。 – 2011-04-22 12:48:17

+0

[調試器*不遵循分叉子進程!](http://search.cpan.org/dist/perl/lib/perl5db.pl#xterm_get_fork_TTY)試試吧,你會得到一個xterm窗口。 – daxim 2011-04-22 16:57:58