亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

c++代碼調(diào)試方式的幾點建議

 更新時間:2020年08月13日 11:43:52   作者:Dabelv  
這篇文章主要介紹了c++代碼調(diào)試方式的幾點建議,幫助大家更好的理解和學習c++,感興趣的朋友可以了解下

1.代碼調(diào)試的重要性

代碼調(diào)試在程序開發(fā)階段占有舉足輕重的地位,可見代碼調(diào)試的重要性。但是有一點必須強調(diào):程序是設計出來的,而不是調(diào)試出來的。這是所有程序員必須牢記在心的一條準則。一個沒有設計或者這幾得很糟糕的程序,無論怎樣調(diào)試,也不會成為一個合格的程序。

程序有著良好的設計的前提下,軟件開發(fā)的過程中,編碼錯誤在所難免。所有程序可能出現(xiàn)的錯誤可分為兩類:語法錯誤和邏輯錯誤。調(diào)試通常是指在消除了語法錯誤之后,發(fā)現(xiàn)程序中的邏輯錯誤的過程。對C/C++程序進行調(diào)試,有這樣集中常用的手段。它們既可以單獨使用,也可以配合使用。

2. 代碼調(diào)試方式的幾點建議

2.1使用打印語句

這是最樸素,也是最直接的方法。程序的運行可以看成是一組變量(狀態(tài))不斷變化的過程,這個過程就是數(shù)據(jù)處理的過程。如果程序的最終結果不對,那么我們必須考慮這一組狀態(tài)什么時候出現(xiàn)了問題,而查看中間結果就成了一種最有效的手段。

因此,不要過分迷信功能強大的調(diào)試工具。在大部分情況下,程序出現(xiàn)的問題都是一些小問題。而正是這些小問題,卻造成了大麻煩。程序員可以通過對最有可能出錯的代碼附近使用簡單的printf()語句或cout<<…語句來輸出中間結果,查看異常情況。

2.2使用調(diào)試標記

在調(diào)試程序的時候使用相應的輔助代碼(如輸出中間結果等),在調(diào)試完成之后隱藏這些代碼,是一種常用的調(diào)試策略。

這種策略可以借助于#define、#ifdef、#endif這三個與編譯指令來實現(xiàn)。具體地說,就是在調(diào)試程序的時候,利用編譯器的命令行參數(shù)定義調(diào)試標記(相當于程序中用#define定義的宏),然后再#ifdef和#endif之間包含相應的調(diào)試代碼就可以了。當程序最終調(diào)試完成后,在生成發(fā)行版時,只要在編譯器命令行參數(shù)中不再提供調(diào)試標記,程序中的調(diào)試代碼就會消失。常用的調(diào)試標記為_DEBUG(在VC++ 2012)中,編譯器調(diào)試版的程序是會缺省定義宏_DEBUG。考察如下程序。

#include <iostream>
using namespace std;

int main()
{
	int i=5;
#ifdef _DEBUG
	cout<<i<<endl;
#endif
	cout<<"Hello World!"<<endl;
}

在調(diào)試程序的時候,會執(zhí)行#ifdef和#endif之間的語句。當調(diào)試完成之后,由于調(diào)試標記_DEBUG失去定義,從而隱藏調(diào)試代碼。

2.3使用調(diào)試變量

與使用調(diào)試標記的方法類似,可以在運行時設置一個供調(diào)試用的bool型變量,它的值決定了特定調(diào)試代碼的開放和關閉。并且可以通過程序的命令行參數(shù)來控制該變量的開關。上面的程序經(jīng)過修改如下。

#include <iostream>
#include <string>
using namespace std;

bool debug;

int main(int argc,char* argv[])
{
	int i=5;
	for(int j=0;j<argc;++j)
	{
		if(string(argv[j])=="debug=on")
		{
			debug=true;
		}
	}
	if(debug)
	{
		cout<<i<<endl;
	}
	cout<<"Hello World!"<<endl;
}

程序通過命令行啟動時,只要在命令行參數(shù)中指明debug=on,就可以輸出調(diào)試信息。否則,只是輸出程序“正?!边\行的部分。這樣就具有較高的靈活性。

2.4使用內(nèi)置的調(diào)試宏

在程序調(diào)試的過程中,經(jīng)常希望知道當前運行的是哪個模塊小的哪個函數(shù),在源文件中是第幾行等等。如果手工添加這些信息,無疑會給程序員帶來很大的負擔。因此,C++提供了幾個宏,他們分別是__FILE__、__FUNCTION____LINE__,可以利用它們“自動“獲取有關模塊、函數(shù)和行的信息??疾烊缦鲁绦?。

#include <iostream>
using namespace std;

void func1()
{
	cout<<__FILE__<<endl;
}

void func2()
{
	cout<<__FUNCTION__<<endl;
}

void func3()
{
	cout<<__LINE__<<endl;
}

int main(int argc,char* argv[])
{
	func1();
	func2();
	func3();
}

在本人的機器上輸出如下信息:

e:\lvlv_study\synchronousfile\school\2015.10.23\programming\debug\main.cpp
func2
13

另外還可以使用assert()宏來進行斷言。assert是一個只在調(diào)試版本下起作用的宏。另外,用戶也可以定義自己的宏輔助來完成調(diào)試任務。例如下面的紅可以用來顯示變量的值,而且變量的名字會一同顯示出來:

#define PR(x) cout<<#x”=”<<x;

這是利用#對宏的參數(shù)進行字符串化的處理。

2.5利用調(diào)試工具進行調(diào)試

利用集成開發(fā)環(huán)境進行調(diào)試也是一種攢則??梢栽贗DE中設置斷點、但不調(diào)試、產(chǎn)看變量的內(nèi)存的值、動態(tài)修改變量的值以改變程序的執(zhí)行路徑等。每一種具體的調(diào)試工具,其調(diào)試命令和方法都有差異,使用時要參閱相應的文檔(如MSDN等)。

要說明的一點是,使用工具進行調(diào)試與基于打印輸出的調(diào)試除了在使用的方便程度上有所差異外,在某些特殊的情況下,不能活著很難用工具進行某些程序的調(diào)試。如在Windows程序設計中,要調(diào)試與窗口重繪的有關代碼,就不適合用IDE進行調(diào)試。原因是焦點從IDE窗口轉到應用程序的窗口時,會引發(fā)新的重繪動作,導致程序運行陷入“死循環(huán)“。Linux環(huán)境下,進行代碼的調(diào)試,我們可以借助于強大的調(diào)試工具gdb,其可以快速的定位到程序出錯的位置,如使用bt或where命令可以快速找到程序出現(xiàn)core dumped的位置。

3.總結

使用各種調(diào)試的手段或工具,其目的是盡早的發(fā)現(xiàn)已經(jīng)存在于程序中的錯誤。與此相關聯(lián)的問題是,如何較少的引入錯誤、如何有策略地使用調(diào)試手段。給出幾條如下建議。

(1)采用良好的變成風格。比如,用統(tǒng)一的規(guī)范為變量、函數(shù)和類型命名。程序的基本單位(如函數(shù))的規(guī)模控制在一定范圍之內(nèi)(如100行),鋸齒形編碼,合理的注釋等等。

(2)進行代碼復查。這是Watts S Humphery領導的研究小組指定的PSP(Personal Software Process,即個人軟件過程)規(guī)范中提倡的做法。在編譯之前就進行代碼復查,比直接進行編譯更能有效地發(fā)現(xiàn)程序缺陷。

(3)對歷史數(shù)據(jù)進行統(tǒng)計和跟蹤。每個程序員的只是背景和工作習慣各不相同,通過統(tǒng)計歷史上個人最容易出現(xiàn)哪些類型的編程錯誤,以便在將來有針對性地排查,是一種有效的提高程序質(zhì)量的做法。

以上就是c++代碼調(diào)試方式的幾點建議的詳細內(nèi)容,更多關于C++代碼調(diào)試的資料請關注腳本之家其它相關文章!

相關文章

  • C++設計模式之狀態(tài)模式

    C++設計模式之狀態(tài)模式

    這篇文章主要介紹了C++設計模式之狀態(tài)模式,本文講解了什么是狀態(tài)模式、狀態(tài)模式的使用場合、狀態(tài)模式的實現(xiàn)代碼等內(nèi)容,需要的朋友可以參考下
    2014-10-10
  • C/C++實現(xiàn)獲取硬盤序列號的示例代碼

    C/C++實現(xiàn)獲取硬盤序列號的示例代碼

    獲取硬盤的序列號、型號和固件版本號,此類功能通常用于做硬盤綁定或硬件驗證操作,下面我們就來學習一下如何使用C/C++實現(xiàn)獲取硬盤序列號吧
    2023-11-11
  • C/C++可變參數(shù)函數(shù)的實現(xiàn)

    C/C++可變參數(shù)函數(shù)的實現(xiàn)

    這篇文章主要介紹了C/C++可變參數(shù)函數(shù)的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-04-04
  • C語言數(shù)據(jù)結構與算法之鏈表(二)

    C語言數(shù)據(jù)結構與算法之鏈表(二)

    在這篇文章中,我們將拋開令人頭禿的指針和結構體,我們將另外使用一種數(shù)組來實現(xiàn)的方式,叫做模擬鏈表。讓來跟隨小編一起學習學習吧
    2021-12-12
  • C語言簡明介紹常見關鍵字的用法

    C語言簡明介紹常見關鍵字的用法

    關鍵字是C語言非常重要的一部分,熟練的掌握和使用關鍵字有助于我們更加熟悉了解C語言,同時C語言的關鍵字也是面試筆試中??嫉膬?nèi)容。C語言的關鍵字共有32個,但并不是每個關鍵字都有坑,本篇文章將通過理論聯(lián)系實際的方式為大家講解C語言中易混易錯以及??嫉囊恍╆P鍵字
    2022-06-06
  • C++調(diào)用C函數(shù)實例詳解

    C++調(diào)用C函數(shù)實例詳解

    這篇文章主要介紹了C++調(diào)用C函數(shù)實例詳解的相關資料,需要的朋友可以參考下
    2017-07-07
  • String底層函數(shù)的實現(xiàn)方式詳解

    String底層函數(shù)的實現(xiàn)方式詳解

    這篇文章主要介紹了String底層函數(shù)的實現(xiàn)方式,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-09-09
  • 在C++中把字符串轉換為整數(shù)的兩種簡單方法

    在C++中把字符串轉換為整數(shù)的兩種簡單方法

    經(jīng)常會遇到類型轉換,本文主要介紹了C++中把字符串轉換為整數(shù)的兩種簡單方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-06-06
  • C語言?動態(tài)內(nèi)存管理全面解析

    C語言?動態(tài)內(nèi)存管理全面解析

    動態(tài)內(nèi)存是相對靜態(tài)內(nèi)存而言的。所謂動態(tài)和靜態(tài)就是指內(nèi)存的分配方式。動態(tài)內(nèi)存是指在堆上分配的內(nèi)存,而靜態(tài)內(nèi)存是指在棧上分配的內(nèi)存,本文帶你深入探究C語言中動態(tài)內(nèi)存的管理
    2022-02-02
  • C語言實現(xiàn)五子棋人人對戰(zhàn)

    C語言實現(xiàn)五子棋人人對戰(zhàn)

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)五子棋人人對戰(zhàn),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-12-12

最新評論