Perl スクリプトを使用して Metaware Debugger ツールを自動化しようとしています。そのツールを実行するためのコマンド ライン オプションもあります。ただし、ツールを呼び出してソースと宛先のパスを設定すると、スクリプトがツールを制御できなくなります。
ツール全体を Perl で制御できるモジュールまたは方法はありますか?
Perl スクリプトを使用して Metaware Debugger ツールを自動化しようとしています。そのツールを実行するためのコマンド ライン オプションもあります。ただし、ツールを呼び出してソースと宛先のパスを設定すると、スクリプトがツールを制御できなくなります。
ツール全体を Perl で制御できるモジュールまたは方法はありますか?
Linux では、コマンド ライン アプリケーションを制御するために特別に設計された CPAN の Expect perl モジュールを使用できます。この CPAN モジュールは、コマンド ライン アプリを制御するために Tcl の拡張として作成された有名な Expect プログラムをモデルにしています。
CPAN の最新バージョンの Expect については、ここをクリックしてください
PATH で perl install と "cpan" コマンドが動作していると仮定して、このシェル コマンド (bash で) を使用して Expect パッケージと依存関係をインストールします。
$ cpan install 期待
アップデート:
ほとんどの人 (私を含む) は、専用の Metware Debugger にアクセスして、その特定のツールの制御をテスト/デモンストレーションすることはできません。
幸いなことに、ほとんどのコマンドライン デバッガーは、ターミナル セッションと対話する方法に関してかなり似ているため、うまくいけば、gdb
perl Expect モジュールを使用してデバッガーを制御するデモンストレーションが、使用している環境にかなり簡単に変換されます。
CPAN Expect モジュールを使用して単純な C プログラムの gdb デバッグ セッションを制御する perl スクリプトの例を次に示します。
#!/bin/env perl
use Expect;
my @params = ("./x");
my $default_timeout = 3;
my $exp = new Expect;
$exp->raw_pty(1);
my $exp = Expect->spawn("gdb", @params)
or die "Cannot spawn $command: $!\n";
$exp->slave->stty(qw(raw));
# Send commands to gdb session, wait for (gdb) prompt before each ->send
$exp->send("set args 4\n");
$exp->expect($default_timeout, [ qr/\(gdb\) /, sub { @_[0]->send("b main\n"); }]);
$exp->expect($default_timeout, [ qr/\(gdb\) /, sub { @_[0]->send("r\n"); }]);
$exp->expect($default_timeout, [ qr/\(gdb\) /, sub { @_[0]->send("n\n"); }]);
$exp->expect($default_timeout, [ qr/\(gdb\) /, sub { @_[0]->send("p a\n"); }]);
$exp->expect($default_timeout, [ qr/\(gdb\) /, sub { @_[0]->send("c\n"); }]);
$exp->expect($default_timeout, [ qr/\(gdb\) /, sub { @_[0]->send("quit\n"); }]);
$exp->expect($default_timeout, [ qr/\n/, sub { }]);
$exp->soft_close();
0;
以下は、gdb セッションを制御するために perl スクリプトを実行する前に、x.c
使用してコンパイルする必要がある C プログラム ファイルです。gcc -g -o x x.c
#include <stdio.h>
int main(int argc, char *argv[]) {
int a = (argc > 1) ? atoi(argv[1]) : 13;
printf("a = %d\n", a);
return 0;
}
xc ファイルをコンパイルする前に、まず yum を使用して gcc と gdb をインストールする必要があることに注意してください。