當前位置:首頁 » 編程軟體 » perl調試腳本

perl調試腳本

發布時間: 2024-04-06 15:45:17

『壹』 Perl腳本在數字IC設計中有哪些應用

Perl腳本可以用於生成有規律的代碼,如SOC地址仲裁模塊verilog代碼、不同規格的CRC校驗verilog代碼、不同規格的FIFO代碼。
在晶元設計過程中,所用到的FIFO數量很多,大於100多個很常見,甚至大於500個都是存在的。而不同規格的FIFO基本都是用最基礎的RAM模塊來搭建實現的,如果依靠人工編寫,錯誤率高而且效率極其低下。因此,使用perl腳本編寫不同規格的FIFO代碼是可靠高效的方式。
快速生成testbench:在進行功能模擬的時候,需要編寫測試案例testbench,可以利用perl腳本快速生成測試案例的大部分代碼,手動添加少量verilog,即可快速完成testbench的編寫,有效減少工作量。
Verilog代碼自動對齊:verilog代碼在人工編寫時全靠手敲空格符會很累,並且效率低下,採用perl腳本一鍵對齊,效率高節省體力。
Mole例化連接:有些mole模塊的輸入輸出信號有上百條,依靠手動添加會很繁瑣,此時利用perl腳本生成例化模塊可以有效提高效率,降低錯誤率。

『貳』 為什麼perl腳本必須要加perl命令才能運行

加perl命令是為了讓該程序以perl環境運行。在windows下,如果你把.pl為後綴的默認打開方式為perl,就可以雙擊打開啦,不用輸入perl+程序名

『叄』 如何調試perl腳本

進入退出:
perl
-d debugtest用調試器載入perl程序運行,互動式界面

Loading
DB routines from perl5db.pl version 1.3

Editor
support available.

Enter
h or `h h' for help, or `perldoc
perldebug'
for more help.

main::(p4.pl:2): my($xx,$yy)=(1,1);

DB<1>

先是歡迎信息,顯示第一個可執行行:程序將要執行的當前行號。包名,文件名,文件中的行號。

提示符DB<n>
n為命令行號。h可看幫助,q退出調試器
l
預設顯示10行 再輸入l接著顯示10行

l
10 指定顯示第10行

l
8-10 指定顯示行的范圍

l
8+3 指定從哪行開始多少行。

l
subs 指定顯示函數,提供函數名。如果太長只顯示前幾行,用l接著顯示

-
顯示在當前行前面的行,再輸入-繼續向前

w
7 包含指定行的顯示窗口 windows可能不一樣

//
?? 從當前行搜索包含指定模式的行 /find/
//從前向後正向搜索,??從後向前逆向搜索 可忽略?? //中後面的? /。

S
列出所有函數,包名::函數
無參數的預設形式列出所有底層和繼承的函數,太多。加上搜索模式,指定當前程序包 S main可列出含main的函數
s 執行單條語句 顯示下一條要執行的語句。如果需要交互會等待輸入。

對於函數,僅僅是進入不執行,如果不進入函數內部,要跳過用n。不能進入系統內部的庫函數,只能進入自己定義的

n 執行一行程序,stepover 不進入函數。

f 執行當前函數剩下的語句,顯示跟隨函數的語句
step
out 舊命令,現在為切換文件名

回車
如果執行了s或n,以後只用回車重復執行上一個s或n的命令。

r 在函數中執行到函數外
b 10
在哪一行設置斷點。如果此行非執行語句,顯示不能設置斷點。如果一條語句有多行,則在第一行設置,其餘行不能設置。

b func在函數處設置斷點

b 10
($curdir eq
"") 當條件為真時中斷執行

c
執行到斷點或終止。繼續

c
12臨時斷點,只中斷一次,繼續執行在12行中斷。

L
列出所有斷點。列出前幾行,當前行,斷點。斷點條件。

B
10刪除斷點。不帶參數認為是下一行是斷點。

B *
刪除所有斷點。
X
var 不帶參數列出main包的所有變數,包括預定義的變數。指定變數不帶$,@。可能是符號表中的變數才行。現在與V同。

V
var 列出任何包的變數。只指定包名列出包的所有變數。指定包及變數為main
var。無::

S
列出所有可用的函數,包名::函數 無參數的預設形式列出所有底層和繼承的函數,太多。加上搜索模式,

指定當前程序包
S
main可列出含main的函數

p
expr
指印表達式值。把標准輸出重定向也會輸出到屏幕。
程序到達某一行時指定執行一條或多條語句。常見的行動作是顯示變數值或把含錯誤值的變數重置為指定的值

a
10 print ("curdir is $curdir\n") 多條語句在一行中用分號;分開,當要續行時用\ 執行完第10行執行指定的語句。

A
*刪除所有行動作
A 10刪除第10行的動作

>
print 在程序開始執行前執行語句。無參數形式刪除設置

<
print 在程序執行完成後執行語句。無參數形式刪除設置
跟蹤 顯示每一個執行行。

t
打開,關閉跟蹤。每執行顯示一行。

任何非調試命令的perl語句都可執行。分號可忽略。更改變數值。

H
列出從前命令

!
n 執行從前命令。忽略行號執行上一條命令
n=-2跳過2條命令。從當前H列表逆向跳過。

T
棧跟蹤。調用級

$
= &main::sub2('hi') from file debug1 line 7

$
= &main::sub1('hi') from file debug1 line 3

當前程序在第7行,在main包的sub2函數中,以hi為實際傳遞的參數。返回簡單變數,此函數由sub1調用。

=
別名 命令 給命令定義別名 =
pc print ("curdir is $curdir\n");別名存在%DB(%DB::alias)中。無參數列出定義的別名。輸入pc列印語句。

預定義別名:每次載入調試器自動定義別名。在.perldb中加入$DB'alias{"pc"} = 's/^pc/print
("curdir is $curdir\n");/';
錯誤檢查
Lint perl -MO=Lint,-u pl 編譯時檢查

perldiag錯誤信息

-w 重定義函數變數未使用

Use strict;

use diagnostics 警告信息。
命令行參數簡介
-c 語法檢查

-v版本

-w警告信息

-e執行單行程序

-s為程序提供命令行選項。perl -s prog.pl
-q =>$q=1作為選項。不出現在@ARGV中。否則不加-s,-q作為字元串存在@ARGV中。可賦值-abc="abc"
跟在程序名後帶-的是選項,不帶-的不是,不是選項的項後面的所有都不是選項。

-P先運行c預處理器,輸出再由perl執行

-I指定目錄中的包含文件

-n循環處理多個文件。不用while

-p讀文件行並顯示。同n,不用print自動顯示。

-i編輯文件,讀然後寫迴文件。
-a分割行到@F

-F分割模式,指定分割符

-0
指定輸入行結束符,用八進製表示

-1
指定輸出行結束符

-x從消息中抽取程序。忽略行,直到遇到#!..perl。到文件尾,ctrl-d
ctrl-z __END__時結束

-u產生coremp

-U可以執行不安全操作

-S從路徑中查找程序

-D設置調試標志

-T寫安全程序。從外部獲得的數據不能作為命令或修改文件系統

-d使用調試器

『肆』 誰幫我解釋下這個Perl腳本,越詳細越好

在指定目錄下,遍歷所有文件包括子目錄下文件,尋找關鍵詞,並列印出來!
指定目錄為第一個參數,關鍵詞為第二個,比如該腳本名為 find.pl
用法應該就是 find.pl<空格>目錄名<空格>文件名。 有段時間沒用perl了,大概說一下吧,不對的見諒阿。
#!/usr/bin/perl ##類unix系統下告知系統這是perl腳本 前提是需要文件為可執行
sub subdir { ##找到和這個 { 向對應的 } 這里是 過程 subdir 大體功能是把目錄存入數組@dir
##把文件存入數組@file
@tmp=(); ##聲明臨時數組@tmp
$rootdir=shift; ##從參數中讀取目錄名,就是subdir($ARGV[0])里的$ARGV[0].
opendir(DIR, $rootdir);##打開目錄
@tmp = readdir(DIR);##讀取目錄,把目錄下的文件和子目錄名字都讀進取。只是名字哦!

$start=@dir;#目錄數組的舊終點 ##設置標志位,用於在主程序中判斷目錄是否為空
for (local $i=2;$i<=@tmp-1;$i++) #從2開始是要跳過./和../目錄
{ ##開始對@tmp下的內容進行分類整理
if (-d $rootdir.'/'.$tmp[$i]) {push (@dir,$rootdir.'/'.$tmp[$i]);} #是目錄(文件夾)放進@dir數組
if (-f $rootdir.'/'.$tmp[$i]) {push (@file,$rootdir.'/'.$tmp[$i]);}##是文件,放進@file數組
}
$end=@dir;#目錄數組的新終點 ##設置另一個標志位,用途同$start。

closedir(DIR); #關閉句柄
@tmp=();# 臨時數組清空 ,為了後續讀取子目錄下的內容做准備。
#print $start."-";
#print $end."\n";
}

subdir($ARGV[0]); ##這里是主程序開始的地方,@ARGV數組包含環境變數,就是執行的時候
##跟在文件名後面的東西開始第一個就是$ARGV[0],第二個是ARGV[1],以此類推.....

#start=end說明經過上一條(下一條)命令,數組沒有變化(開始兼結尾)
if ($start ne $end) {for ($k=$start;$k<=$end-1;$k++){subdir($dir[$k]);}}
##上面這條的意思就是,如果該目錄下無子目錄那就算了,如果有,用subdir挨個處理子目錄
##個人認為這個寫的有問題,因為如果$ARGV[0]所指目錄包含2層以上(含兩層)子目錄的話,
##腳本就做不好完全的遍歷....具體改進方法可參考下面文件讀取時的做法..
#foreach $f (@file){
#chomp $f;
#print "$f\r\n";
#}
#exit;

foreach $f (@file){##此時@file數組中保存的全部都是文件名
chomp $f; ##除去文件名後的 換行符
open F,$f or next; ##打開文件句柄,打不開這個就去試試打開下一個.....
while(<F>){ ##讀取文件,一行一行來,讀取到EOF標志是while循環結束
if($_=~ m/$ARGV[1]/){ ##如果當前行中有和 $ARGV[1]中需要查詢字元一樣的字元
print "$f\r\n";last; ##列印出文件名
}
}
close F; ##關閉文件句柄
}

----------------------------------差不多就是這樣的了,perl用起來還是很方便的就是需要記的東西相對多點兒,而且一點不對,不好調試,這個腳本寫的不是很規范,雖然語法檢查沒問題。但是運行起來貌似有死循環,最後只好kill掉了..........目前只能看這么多了

熱點內容
pr默認存儲 發布:2024-05-05 04:29:31 瀏覽:551
roblox跑酷腳本怎麼做 發布:2024-05-05 03:57:35 瀏覽:701
捷徑清理緩存 發布:2024-05-05 03:57:35 瀏覽:478
ftputility哪裡下載 發布:2024-05-05 03:47:13 瀏覽:1000
雷凌運動版如何連接安卓手機導航 發布:2024-05-05 03:42:48 瀏覽:267
自動鬼使黑腳本 發布:2024-05-05 03:10:49 瀏覽:880
游戲腳本編程書籍推薦 發布:2024-05-05 02:59:13 瀏覽:72
編譯器書籍推薦 發布:2024-05-05 02:57:02 瀏覽:56
電池存儲溫度 發布:2024-05-05 02:53:07 瀏覽:207
安卓在美國怎麼下載 發布:2024-05-05 02:31:06 瀏覽:925