第一步,用編輯程序把編制的源程序按照一定的書(shū)寫(xiě)格式送到計算機中,編輯程序會(huì )根據使用人員的意圖對源程序進(jìn)行增、刪或修改。
第二步,把送入的源程序翻譯成機器語(yǔ)言,即用編譯程序對源程序進(jìn)行語(yǔ)法檢查并將符合語(yǔ)法規則的源程序語(yǔ)句翻譯成計算機能識別的“語(yǔ)言”。如果經(jīng)編譯程序檢查,發(fā)現有語(yǔ)法錯誤,那就必須用編輯程序來(lái)修改源程序中的語(yǔ)法錯誤,然后再編譯,直至沒(méi)有語(yǔ)法錯誤為止。
第三步,使用計算機中的連接程序,把翻譯好的計算機語(yǔ)言程序連接起來(lái),并扶植成一個(gè)計算機能真正運行的程序。在連接過(guò)程中,一般不會(huì )出現連接錯誤,如果出現了連接錯誤,說(shuō)明源程序中存在子程序的調用混亂或參數傳遞錯誤等問(wèn)題。這時(shí)又要用編輯程序對源程序進(jìn)行修改,再進(jìn)行編譯和連接,如此反復進(jìn)行,直至沒(méi)有連接錯誤為止。
第四步,將修改后的程序進(jìn)行試算,這時(shí)可以假設幾個(gè)模擬數據去試運行,并把輸出結果與手工處理的正確結果相比較。如有差異,就表明計算機的程序存在有邏輯錯誤。如果程序不大,可以用人工方法去模擬計算機對源程序的這幾個(gè)數據進(jìn)行修改處理;如果程序比較大,人工模擬顯然行不通,這時(shí)只能將計算機設置成單步執行的方式,一步步跟蹤程序的運行。一旦找到問(wèn)題所在,仍然要用編輯程序來(lái)修改源程序,接著(zhù)仍要編譯、連接和執行,直至無(wú)邏輯錯誤為止。也可以在完成后再進(jìn)行編譯。
1. 直接輸入、更改、跟蹤、運行匯編程序 2. 觀(guān)察操作系統的內容;? 3. 查看ROM BIOS的內容;? 4. 觀(guān)察更改RAM內部的設置值;? 5. 以扇區或文件的方式讀寫(xiě)軟盤(pán)數據。? 在DEBUG中地址用段地址與段內地址來(lái)表示,而段地址可以明確地指出來(lái),也可以用一個(gè)段指示器(段寄存器)來(lái)代表,用段寄存器表示時(shí),其段地址就是此寄存器的內含值:? 如:用段地址和段內地址表示FOFF:0100? 用段寄存器和段內地址表示CSF:0100←CS指向F000? 下面列出了常用命令用法。 -A 地址 從指定地址開(kāi)始編寫(xiě)小匯編程序,按兩個(gè)回車(chē)鍵結束編輯 -U 地址 從指定地址開(kāi)始反匯編32字節的機器指令,缺省地址則從上一U命令繼續 -D 始址 終址 以16進(jìn)制/Asc字符對照方式顯示指定內存范圍的數據,每行顯示10H個(gè)字節 -E 地址 值表 用給出的值表(空格分隔)替換指定地址開(kāi)始的內存單元,例:-E 100 'v' 1F 'hello' -N 文件名 為后續的L/W命令約定所操作的文件名 -L 地址 將N命令所指定文件的內容讀入到指定內存位置。另,邏輯卷扇區直接讀:-L 地址 邏卷號 起始邏扇號 扇數 -W 地址 將BX-CX個(gè)字節的內存數據寫(xiě)入N命令指定的文件中。另,邏輯卷扇區直接寫(xiě):-W 地址 邏卷號 起始邏扇號 扇數 -R 寄存器名 顯示并允許修改指定寄存器的值 -G=始址 終址 執行指定內存中的機器指令程序 -T=地址 單步執行機器指令,缺省地址則從上一T命令繼續。另,繼續跟蹤m條指令:-T m 讀取c:卷的引導扇區,并保存到Boot.1文件中,并簡(jiǎn)單分析引導程序的前面幾條指令: -L 1000 2 0 1 -N boot.1 -R bx ;輸入0000 -R cx ;輸入0200 -W 1000 -U 1000 讀取第一個(gè)硬盤(pán)上的主引導扇區,并保存到MB.1文件中,在屏幕上顯示硬盤(pán)分區表數據: -A 100 yyyy:0100 mov dx,0080 yyyy:01xx mov cx,0001 yyyy:01xx mov ax,yyyy yyyy:01xx mov es,ax yyyy:01xx mov bx,1000 yyyy:01xx mov ax,0201 yyyy:01xx int 13 yyyy:01zz nop -G=yyyy:0100 01zz -N mb.1 -R bx ;輸入0000 -R cx ;輸入0200 -W 1000 -D 11be 11ff debugging命令 debugging命令概述 獲得路由器中交換的報文和幀的細節信息 用于調試信息 debugging命令使用注意事項 不使用debug命令監控正常的網(wǎng)絡(luò )運行 在網(wǎng)絡(luò )使用的低峰期使用 不要輕易使用類(lèi)似debugging all之類(lèi)的命令 使用debugging命令后,應立即以“undo debugging”命令終止debugging命令的執行。 Debugger "Debugger"這個(gè)詞按它的英文字面意思來(lái)講是這樣一種“裝置”(-er),這種裝置可以“消除”(De-)“系統中的缺陷”(bug)。然而事實(shí)上,迄今為止我們經(jīng)常使用到的"Debugger"只是用來(lái)幫助我們進(jìn)行Debug的工具,"Debugger"本身不能自動(dòng)完成"Debug"。我們可以回想一下我們是如何進(jìn)行Debug的,在進(jìn)行Debug的過(guò)程中,我們通過(guò)Debugger來(lái)完成以下工作: (1)監視“Debug對象”的狀態(tài); (2)控制“Debug對象”的運行; 這些工作可以為“發(fā)現Debug對象中存在的問(wèn)題”以及“對解決問(wèn)題方案的檢驗”提供有用的信息。 監控工作有時(shí)只需要由軟件就可以完成,有時(shí)不僅需要軟件支持,還需要硬件的支持。 Debugger除了被用來(lái)Debug,還被用來(lái)幫助我們理解“Debug的對象”內部結構,因為我們用到的Debugger能夠完成對“Debug對象”的監控工作,在監控的過(guò)程中可以獲取“Debug對象”動(dòng)態(tài)特征的信息,這對我們理解其結構是非常有用的。 關(guān)于更詳細的介紹和研究可以參考國人原創(chuàng )的《軟件調試》 ,這
[url= ]嫦娥二號直播[/url]
要了解調試程序的最好方法,首先要分析一下調試過(guò)程的三個(gè)要素:應該用什么工具調試一個(gè)程序?用什么辦法才能找出程序中的錯誤?怎樣才能從一開(kāi)始就避免錯誤?應該用什么工具調試一個(gè)程序?有經(jīng)驗的程序員會(huì )使用許多工具來(lái)幫助調試程序,包括一組調試程序和一些"lint”程序,當然,編譯程序本身也是一種調試工具。
在檢查程序中的邏輯錯誤時(shí),調試程序是特別有用的,因此許多程序員都把調試程序作為基本的調試工具。一般來(lái)說(shuō),調試程序能幫助程序員完成以下工作:(1)觀(guān)察程序的運行情況 僅這項功能就使一個(gè)典型的調試程序具備了不可估量的價(jià)值。
即使你花了幾個(gè)月的時(shí)間精心編寫(xiě)了一個(gè)程序,你也不一定完全清楚這個(gè)程序每一步的運行情況。如果程序員忘記了某些if語(yǔ)句、函數調用或分支程序,可能會(huì )導致某些程序段被跳過(guò)或執行,而這種結果并不是程序員所期望的。
不管怎樣,在程序的執行過(guò)程中,尤其是當程序有異常表現時(shí),如果程序員能隨時(shí)查看當前被執行的是那幾行代碼,那么他就能很好地了解程序正在做什么以及錯誤發(fā)生在什么地方。(2)設置斷點(diǎn) 通過(guò)設置斷點(diǎn)可以使程序在執行到某一點(diǎn)時(shí)暫時(shí)停住。
當你知道錯誤發(fā)生在程序的哪一部分時(shí),這種方法是特別有用的。你可以把斷點(diǎn)設置在有問(wèn)題的程序段的前面、中間或后面。
當程序執行到斷點(diǎn)時(shí),就會(huì )暫時(shí)停住,此時(shí)你可以檢查所有局部變量、參數和全局變量的值。如果一切正常,可以繼續執行程序,直到遇到另一個(gè)斷點(diǎn),或者直到引起問(wèn)題的原因暴露出來(lái)。
(3)設置監視 程序員可以通過(guò)調試程序監視一個(gè)變量,即連續地監視一個(gè)變量的值或內容。如果你清楚一個(gè)變量的取值范圍或有效內容,那么通過(guò)這種方法就能很快地找出錯誤的原因。
此外,你可以讓調試程序替你監視變量,并且在某個(gè)變量超出預先定義的取值范圍或某個(gè)條件滿(mǎn)足時(shí)使程序暫停執行。如果你知道變量的所有行為,那么這么做是很方便的。
好的調試程序通常還提供一些其它功能來(lái)簡(jiǎn)化調試工作。然而,調試程序并不是唯一的調試工具,lint程序和編譯程序本身也能提供很有價(jià)值的手段來(lái)分析程序的運行情況。
注意:lint程序能分辨數百種常見(jiàn)的編程錯誤,并且能報告這些錯誤發(fā)生在程序的哪一部分。盡管其中有一些并不是真正的錯誤,但大部分還是有價(jià)值的。
lint程序和編譯程序所提供的一種典型功能是編譯時(shí)檢查(compile—time checks),這種功能是調試程序所不具備的。當用這些工具編譯你的程序時(shí),它們會(huì )找出程序中有問(wèn)題的程序段,可能產(chǎn)生意想不到的效果的程序段,以及常見(jiàn)的錯誤。
下面將分析幾個(gè)這種檢查方式的應用例子,相信對你會(huì )有所幫助。等于運算符的誤用 編譯時(shí)檢查有助于發(fā)現等于運算符的誤用。
請看下述程序段: void foo(int a,int b) { if ( a = b ) { / * some code here * / } } 這種類(lèi)型的錯誤一般很難發(fā)現!程序并沒(méi)有比較兩個(gè)變量,而是把b的值賦給了a,并且在b不為零的條件下執行if體。一般來(lái)說(shuō),這并不是程序員所希望的(盡管有可能)。
這樣一來(lái),不僅有關(guān)的程序段將被執行錯誤的次數,并且在以后用到變量a時(shí)其值也是錯誤的。未初始化的變量 編譯時(shí)檢查有助于發(fā)現未初始化的變量。
請看下面的函數:void average ( float ar[], int size ) { float total; int a; for( a = 0;a { total+=ar[a]; } printf(" %f\n", total / (float) size ); } 這里的問(wèn)題是變量total沒(méi)有被初始化,因此它很可能是一個(gè)隨機的無(wú)用的數。數組所有元素的值的和將與這個(gè)隨機數的值相加(這部分程序是正確的),然后輸出包括這個(gè)隨機數在內的一組數的平均值。
變量的隱式類(lèi)型轉換 在有些情況下,C語(yǔ)言會(huì )自動(dòng)將一種類(lèi)型的變量轉換為另一種類(lèi)型。這可能是一件好事(程序員不用再做這項工作),但是也可能會(huì )產(chǎn)生意想不到的效果。
把指針類(lèi)型隱式轉換成整型恐怕是最糟糕的隱式類(lèi)型轉換。void sort( int ar[],int size ) { /* code to sort goes here * / } int main() { int arrgy[10]; sort( 10, array ); } 上述程序顯然不是程序員所期望的,雖然它的實(shí)際運行結果難以預測,但無(wú)疑是災難性的。
用什么辦法才能找出程序中的錯誤?在調試程序的過(guò)程中,程序員應該記住以下幾種技巧:先調試程序中較小的組成部分,然后調試較大的組成部分 如果你的程序編寫(xiě)得很好,那么它將包含一些較小的組成部分,最好先證實(shí)程序的這些部分是正確的。盡管程序中的錯誤并不一定發(fā)生在這些部分中,但是先調試它們有助于你理解程序的總體結構,并且證實(shí)程序的哪些部分不存在錯誤。
進(jìn)一步地,當你調試程序中較大的組成部分時(shí),你就可以確信那些較小的組成部分是正常工作的。徹底調試好程序的一個(gè)組成部分后,再調試下一個(gè)組成部分 這一點(diǎn)非常重要。
如果證實(shí)了程序的一個(gè)組成部分是正確的,不僅能縮小可能存在錯誤的范圍,而且程序的其它組成部分就能安全地使用這部分程序了。這里應用了一種很好的經(jīng)驗性原則,簡(jiǎn)單地說(shuō)就是調試一段代碼的難度與這段代碼長(cháng)度的平方成正比,因此,調試一段20行的代碼比調試一段10行的代碼要難4倍。
因此,在調試過(guò)程中每次只把精力集中在一小段代碼上是很有幫助的。當然,這僅僅是一個(gè)總的原則,具體使用時(shí)還要視。
這個(gè)跟你用什么調試器有一定關(guān)系
如果你用VC6.0的調試器,那么可能你的調試手段就會(huì )受一定限制,VC下主要就是
單步,步入,堆棧和寄存器的查看,變量的查看,普通斷點(diǎn),條件斷點(diǎn),內存訪(fǎng)問(wèn)斷點(diǎn);
如果你用OllyDbg,那么除了上述手段外,還有硬斷點(diǎn),內存讀/寫(xiě)斷點(diǎn)等
如果你用windbg的話(huà),手段也很豐富,就是命令多了點(diǎn),可能需要你去記;
大多數調試器的常用手段就是我上面說(shuō)的那些了
使用VisualStudio2013編寫(xiě)和調試c語(yǔ)言程序步驟:1、打開(kāi)【文件】——【新建】——【項目】,打開(kāi)‘新建項目’窗口。
2、在【模板】選擇【Visual C++】,【win32控制臺應用程序】,【名稱(chēng)】、【位置】、【解決方案名稱(chēng)】根據自己的需要填寫(xiě),不會(huì )填的話(huà)默認即可。3、單擊【確定】彈出如下窗口:4、單擊【下一步】,出現如下窗口:在【空項目】前面的方框里打鉤,然后點(diǎn)擊【完成】。
5、【源文件】——右鍵【添加】——【新建項】這里【名稱(chēng)】里給自己的文件取個(gè)名字,選擇【C++文件(.cpp)】——【添加】,然后就可以編輯程序了。6、程序寫(xiě)好后,按【F5】調試,【Ctrl+F5】運行。
聲明:本網(wǎng)站尊重并保護知識產(chǎn)權,根據《信息網(wǎng)絡(luò )傳播權保護條例》,如果我們轉載的作品侵犯了您的權利,請在一個(gè)月內通知我們,我們會(huì )及時(shí)刪除。
蜀ICP備2020033479號-4 Copyright ? 2016 學(xué)習?shū)B(niǎo). 頁(yè)面生成時(shí)間:3.520秒