C++ 调试帮助简介
生活随笔
收集整理的這篇文章主要介紹了
C++ 调试帮助简介
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Source: C++ primer(version 5)
主要思想是:程序所包含的調試代碼僅在開發(fā)過程中執(zhí)行。當應用程序已經完成,并且準備提交時,就會將調試代碼關閉。這種方法會用到兩項預處理功能:assert 和NDEBUG。
assert預處理宏
定義在<cassert>頭文件中
的所謂預處理宏其實是一個預處理變量,它的行為有點類似于內聯函數。使用一個表達式作為它的條件:
assert(expr);
只要NDEBUG未定義,assert宏就求解條件表達式expr,如果結果為false,assert輸出信息并且終止程序的執(zhí)行。如果該表達式有一個非零(例如:true)值,則assert不做任何操作。
NDEBUG預處理變量
assert的行為依賴于一個名為NDEBUG的預處理變量的狀態(tài)。如果定義了NDEBUG,則assert什么都不做。
使用:g++ -D NDEBUG -o test test_console.cpp
這條命令的作用等價于在main.c文件的一開始寫#define NDEBUG
使用:
可用NDEBUG預處理變量實現有條件的調試代碼:
int main( void ) { #ifndef NDEBUGcerr << “starting main” << endl; #endif //... }- 如果NDEBUG未定義,那么程序就會將信息寫道cerr中,如果NDEBUG已經定義了,那么程序執(zhí)行時將會跳過#ifndef和#endif之間的代碼。
五種在調試時非常有用的常量
預處理器還定義了其余五種常有用的常量:
- _?FILE?_ 文件名
- _?LINE?_ 當前行號
- _?TIME?_ 文件被編譯的時間
- _?DATE?_ 文件被編譯的日期
- _?func?_ 函數的名字
例子:
// 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總結
以上是生活随笔為你收集整理的C++ 调试帮助简介的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: `constexpr`和`const`之
- 下一篇: C++ 中assert()函数用法总结