資源描述:
《fortran第十四講-gdb調(diào)試》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、Fortran程序設(shè)計(jì)第十四講習(xí)題課與GDB調(diào)試復(fù)習(xí)第十三講內(nèi)容舊版本的Fortran特性格式:1-5列是行號(hào)第一列是C或者星號(hào),表示本行為注釋第六列如果不是空白或0,表示續(xù)行注釋有效語句位置續(xù)行舊版本第一列用C或*從第7列到72列第6列非0為續(xù)行Fortran90!開始的行從第1-132列用&表示續(xù)行行號(hào)在1-5列每行程序的最前面DATA語句的使用變量初始化:DATAa,b,c/1.0,2*2.0/數(shù)組初始化:REALa(2,2)DATAa/1.,2.,3.,4./!按列優(yōu)先舊的PARAMETER語句:INTEGERSIZEPARAMETER(SIZE=1000)COMMON
2、語句用BLOCKDATA初始化COMMON塊中的數(shù)據(jù)BLOCKDATAinitialINTEGERvar1,var2COMMON/mydata/var1,var2DATAvar1,var2/1,2/ENDBLOCKDATA四條不必要的子程序特性另一子程序的返回點(diǎn)另一入口點(diǎn)語句函數(shù)將內(nèi)置函數(shù)作為參數(shù)傳遞語句函數(shù)PAUSESTOPENDPAUSE語句用于暫停程序的執(zhí)行已經(jīng)在Fortran95中被刪掉STOP語句用于終止程序的執(zhí)行可以在STOP后面加參數(shù),形式如下:STOPstop_value例如:STOP‘Normalcompletion’當(dāng)終止時(shí),會(huì)顯示這個(gè)字符串END語句在Fo
3、rtran90之前,所有的程序單元都用END結(jié)束Fortran90以后,標(biāo)準(zhǔn)是用形如:ENDPROGRAMENDMODULE之類的語句當(dāng)然,也可以單用END但是,內(nèi)部過程和模塊過程必須用ENDSUBROUTINE和ENDFUNCTION算術(shù)IF語句GOTO語句計(jì)算GOTO語句賦值GOTO語句舊的DO循環(huán)與CONTINUE多文件編譯14.1迷宮的解法一設(shè)置輔助數(shù)組的解法:設(shè)置三個(gè)和maze數(shù)組一樣結(jié)構(gòu)的數(shù)組:Step_maze用于保存當(dāng)前塊在路徑中的步數(shù)Leave_direction用于保存在路徑中離開當(dāng)前塊的方向,0表示東面,1,2,3分別表示南西北From_direction
4、表示從哪個(gè)方向到達(dá)當(dāng)前塊過程列表:Createmaze(maze,n)創(chuàng)建一個(gè)隨機(jī)的二維方陣maze(n,n),方陣的元素要么是0要么是1,1表示迷宮的通道,0表示迷宮的墻Init_random_seed()初始化隨機(jī)數(shù)種子Solve(maze,n)在迷宮maze(n,n)中找到一條從maze(1,1)到maze(n,n)的路徑,如果找不到,輸出提示信息,找到就輸出路徑步驟get_new_position(n,i,j,direction)在數(shù)組direction中取得i,j的方向,并計(jì)算這個(gè)方向所對(duì)應(yīng)的新的i,j值check_direction(maze,n,i,j,direc
5、tion,step_maze)檢查迷宮的下一個(gè)方向能否走的通14.2迷宮的解法二在這個(gè)算法中,不設(shè)置輔助數(shù)組用自定義的數(shù)據(jù)結(jié)構(gòu)來保存在每個(gè)塊上面的步數(shù)、方向等信息TYPE::maze_elementINTEGER::roadINTEGER::leave_directionINTEGER::from_directionINTEGER::stepENDTYPEmaze_element14.3迷宮的遞歸解法見代碼14.4Fortran程序的調(diào)試程序的調(diào)試程序沒有語法錯(cuò)誤,但是運(yùn)行出錯(cuò)程序運(yùn)行結(jié)果和預(yù)期不符程序運(yùn)行結(jié)果的精度達(dá)不到要求調(diào)試的方法:在程序中增加調(diào)試語句,來輸出一些中間結(jié)果
6、用調(diào)試軟件圖形化的調(diào)試軟件命令行的調(diào)試軟件14.5GDB的使用如果需要調(diào)試程序,編譯的時(shí)候添加-g選項(xiàng)gfortran–gexample.f90–oexample生成的example.exe文件就是可執(zhí)行文件此時(shí),可以輸入gdbexample進(jìn)入調(diào)試程序14.6GDB使用概述GDB的命令可以輸入help查看輸入命令時(shí),可以不用輸入完整的命令,只需要前面幾個(gè)字母,當(dāng)然,這前面幾個(gè)字母應(yīng)該唯一區(qū)分了該命令輸入一個(gè)或多個(gè)字母后,連按兩次TAB鍵,可以列出所有以該字母打頭的命令14.7在GDB中運(yùn)行程序rrun可以在gdb中運(yùn)行程序14.8暫停與恢復(fù)程序運(yùn)行調(diào)試程序中,暫停程序運(yùn)行是必
7、須的,GDB可以方便地暫停程序的運(yùn)行。你可以設(shè)置程序的在哪行停住,在什么條件下停住,在收到什么信號(hào)時(shí)停往等等。以便于你查看運(yùn)行時(shí)的變量,以及運(yùn)行時(shí)的流程。當(dāng)進(jìn)程被gdb停住時(shí),你可以使用infoprogram來查看程序的是否在運(yùn)行,進(jìn)程號(hào),被暫停的原因。在gdb中,我們可以有以下幾種暫停方式:斷點(diǎn)(BreakPoint)、觀察點(diǎn)(WatchPoint)、捕捉點(diǎn)(CatchPoint)、信號(hào)(Signals)、線程停止(ThreadStops)。如果要恢復(fù)程序運(yùn)行,可以使用c或是continu