2013-07-12 122 views
0

我正在嘗試使用Perl腳本來自動化Metaware調試器工具。還有命令行選項來運行該工具。但是,調用該工具並設置源和目標路徑後,我的腳本失去了對該工具的控制權。使用perl的工具GUI自動化

是否有任何模塊或方法可以通過Perl實現整個工具控制?

回答

0

在Linux上,您可以使用CPAN中的Expect perl模塊,該模塊專爲控制命令行應用程序而設計。這個CPAN模塊是在着名的Expect程序之後形成的,該程序被編寫爲Tcl的擴展以控制命令行應用程序。

Click here for the latest version of Expect on CPAN

Click here for associated documentation

假設你已經工作的Perl上安裝和PATH 「CPAN」 命令,安裝Expect軟件包使用這個shell命令(在bash)&依賴性:

$ cpan install期望

更新:

大多數人(包括我自己)都無法訪問專有的Metware Debugger來測試/演示對特定工具的控制。

幸運的是,大多數命令行調試器是在他們與終端會話交互的方式方面非常相似,所以希望控制gdb調試程序用Perl的示範期待模塊將很容易轉化爲您的環境。

下面是使用CPAN期待模塊來控制GDB調試會話一個簡單的C程序的例子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; 

以下是C程序文件x.c,你應該編譯之前gcc -g -o x x.c使用運行perl腳本來控制gdb會話。

#include <stdio.h> 

int main(int argc, char *argv[]) { 
    int a = (argc > 1) ? atoi(argv[1]) : 13; 
    printf("a = %d\n", a); 
    return 0; 
} 

請注意,您需要先使用yum來安裝gcc和gdb,如果他們不已經在你的系統上,然後才能編譯x.c文件。

+0

我在Linux環境下運行它。紅帽Linux。我也考慮過期望,但無法繼續。我還想我應該嘗試使用特定於工具的命令行選項。我非常感謝你和任何進一步的幫助表示讚賞! –