VS中Debug 菜單中的菜單命令和功能

 

debug 菜單中的菜單命令和功能
菜單命令 快捷鍵 功能
Go F5 開始或繼續調試程序,到某個斷點,程序的結束或需要用戶輸入的地方停止
Restart Ctrl+Shift+F5 重新開始執行程序,並處於調試狀態
Stop Debugging Shift+F5 終止程序的調試,放回到程序編輯的狀態
Break   在當前位置暫停程序的執行
Step Into F11 單步執行程序的每一個指令,能進入被調用的函數內部
Step Over F10 單步執行,當遇到一個函數的調用時,該函數被執行,單並不進入該函數內部
Step Out Shift+F10

運行到當前函數調用返回後的第一條語句;

使用這個命令能在已確定錯誤不在當前函數中時,快速地執行完此函數

Run to Cursor Ctrl+F10 程序執行到當前光標處,相當於在光標處臨時設置了一個端點
Step Into Specific Function   執行程序的每一步,並進入指定的函數調用,這個命令可以跟蹤任意多的嵌套函數

 variable (變量)窗口

context (上下文)下拉框:在這裏選擇想要查看的函數,然後 Debug 會在窗口顯示函數局部變量的當前值。該窗口有 3 個選項卡。

  • Auto 選項卡中顯示當前語句或前一條語句中變量的值和函數的返回值。
  • Locals 選項卡中顯示當前函數局部變量的名稱、值和類型。
  • this 選項卡以樹型方式顯示當前類對象的所有數據成員,單擊“+”號可展開 this 指針所指對象。

Watch 窗口用於觀察和修改變量或表達式的值。它有 Watch1、Watch2、Watch3 和 Watch4 等 4 個選項卡,在每個選項卡中,用戶都必須手工設置要觀察的變量或表達式。

MFC 調試宏

爲了快速查找程序設計中的錯誤,MFC 提供了一些跟蹤和斷言宏,其中常用的有 TRACE()、ASSERT()、ASSERT_VALID()等。

1.TRACE()宏

TRACE()宏在調試窗口輸出變量數值,它採用類似於 printf()函數和 CString::Format()成員函數的字符串格式化語法,在 TRACE()宏中,可以使用各種 MFC 類。例如

int m_age = 23;
CString m_name("yiding");
TRACE("Name = %s, Age = %d\n", m_name, m_age);

調試窗口輸出下列語句並換行
Name = yiding, Age =23

2.ASSERT()宏

ASSERT()宏語法如下:

ASSER(<條件表達式>);

如果條件表達式爲真,則程序繼續執行;如果爲假,則在該語句處終止程序運行,並彈出一個對話框,顯示程序終止的行及所在文件信息下面一段代碼展示瞭如何使用 ASSERT()宏來校驗傳遞進來的參數。

void test(char* p, int size)
{
    ASSERT(p != 0);      //判斷是否提供了緩衝區
    ASSERT(size >= 100); //判斷緩衝區是否大於 100
    //繼續執行
}

3.ASSERT_VALID()

ASSERT_VALID()宏語法如下:

ASSERT_VALID(<指針>);

ASSERT_VALID()紅用於檢查指針和對象的有效性,對於一般指針,只檢查指針是否爲空。對於 MFC 指針,還需調用CObject::AssertValid()成員函數,判斷對象合法性。ASSERT_VALID()宏提示指針和對象無效的方式與 ASSERT()宏一樣,使用提示對話框輸出錯誤信息。

ASSERT_VALID()宏對於 CObject 派生類的校驗更爲簡單。例如:

void CMView::test(CYView* pView)   //CMView 和 CYView 是 CObject 的派生類
{
    ASSERT_VALID(this);
    ASSERT_VALID(pView);
    //繼續執行
}

4.Dump()調試函數

Dump()函數是 CObject 類的一個成員函數,調用該函數可以輸出對象內部數據成員的值。當程序調試過程中希望檢查對象內部狀態時,該函數是非常有用的。Dump()函數使用“<<”插入操作符輸出數據成員值。例如:

void CAge::Dump(CDumpContext &dc) const
{
    CObject::Dump(dc);
    dc << "Age =" << m_ages;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章