日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++ 调试帮助简介

發(fā)布時間:2024/4/18 c/c++ 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++ 调试帮助简介 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Source: C++ primer(version 5)

主要思想是:程序所包含的調(diào)試代碼僅在開發(fā)過程中執(zhí)行。當(dāng)應(yīng)用程序已經(jīng)完成,并且準(zhǔn)備提交時,就會將調(diào)試代碼關(guān)閉。這種方法會用到兩項(xiàng)預(yù)處理功能:assert 和NDEBUG。

assert預(yù)處理宏

定義在<cassert>頭文件中
的所謂預(yù)處理宏其實(shí)是一個預(yù)處理變量,它的行為有點(diǎn)類似于內(nèi)聯(lián)函數(shù)。使用一個表達(dá)式作為它的條件:
assert(expr);
只要NDEBUG未定義,assert宏就求解條件表達(dá)式expr,如果結(jié)果為false,assert輸出信息并且終止程序的執(zhí)行。如果該表達(dá)式有一個非零(例如:true)值,則assert不做任何操作。

NDEBUG預(yù)處理變量

assert的行為依賴于一個名為NDEBUG的預(yù)處理變量的狀態(tài)。如果定義了NDEBUG,則assert什么都不做。
使用:g++ -D NDEBUG -o test test_console.cpp
這條命令的作用等價(jià)于在main.c文件的一開始寫#define NDEBUG

使用:

可用NDEBUG預(yù)處理變量實(shí)現(xiàn)有條件的調(diào)試代碼:

int main( void ) { #ifndef NDEBUGcerr << “starting main” << endl; #endif //... }
  • 如果NDEBUG未定義,那么程序就會將信息寫道cerr中,如果NDEBUG已經(jīng)定義了,那么程序執(zhí)行時將會跳過#ifndef和#endif之間的代碼。

五種在調(diào)試時非常有用的常量

預(yù)處理器還定義了其余五種常有用的常量:

  • _?FILE?_ 文件名
  • _?LINE?_ 當(dāng)前行號
  • _?TIME?_ 文件被編譯的時間
  • _?DATE?_ 文件被編譯的日期
  • _?func?_ 函數(shù)的名字

例子:

// test_console.cpp #include <iostream> #include <cstddef> #include <cassert> using namespace std;int main (int argc, char** argv){cout<<"argc = "<<argc<<endl;//assert(argc<3);if(argc<3)cout<<"Error: "<<__FILE__<<" :in funciton "<<__func__<<" at line "<<__LINE__<<endl<<" Compiled on "<<__DATE__<<" at "<<__TIME__<<endl;for(size_t i=0;i<argc;i++){cout<<argv[i]<<endl;}return 0; }

執(zhí)行:

g++ -D NDEBUG -o test test_console.cpp -std=c++11 ./test safd

輸出:

argc = 2 Error: test_console.cpp :in funciton main at line 13Compiled on Nov 9 2017 at 14:55:45 ./test safd

總結(jié)

以上是生活随笔為你收集整理的C++ 调试帮助简介的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。