<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    ∪∩deniable Design

    個人JAVA版GAE(google app engine),struts2+jpa+jQuery開發,互相交流 http://iunbug.appspot.com/
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    Visual C++ 6.0調試功能

    這是我自己在學習時整理的,希望對大家有用.其中有幾個部分的內容,如下:

    ※My Note

    全部由我截圖并參考資料進行說明,這其中有大量的內容是調試過程中體會總結才寫的.有不當之處請大家更正.

    ※From 《Visual C++ Debugger》

    這本書寫得非常的不錯,從里面截了一些有用的圖,主要是強烈推薦大家閱讀這本書.

    ※Debug Menu From MSDN

    這是我從Visual C++ 6.0 MSDN Library October 2001中查來的,在My Note中有很多是從那里參考的.強烈推薦大家看這份英文說明.

    ※From 《visual C++ 6.0開發工具與調試》

    這是我從網絡上搜索到的,問題很經典,強烈推薦大家參看學習,避免不必要的錯誤.

    ? ?

    My Note

    常用功能:

    ? ?

    ? ?

    1. Restart(Ctrl+shift+F5):此debugger功能將從程序的開始(第一有效行)處全速執行,而不是從當前所跟蹤的位置開始調

      試,這時所有變量的當前值都將被丟棄,debugger會自動停在程序的main()開始處.這時如果選擇Step Over(F10)就可以逐步執行main()函數了.

    2. Stop Debugging(Shift+F5):此debugger功能將終止(所有)調試,并返回到常規編輯狀態.
    3. Break(此功能常常在遇到調用函數的語句時可見.):此功能將在調試過程中的debugger當前位置掛起程序的執行,然后就可以在調

      試狀態一修改程序的代碼,接著可以用Apply Code Changes(Alt+F10)來應用修改的代碼到正在調試的程序當中.如果,當前(需要,待)可以(從DOS

      等窗口)輸入值,掛起后將不能再輸入.

    4. Apply Code Changes(Alt+F10):此功能可以在程序正在調試程序過程中應用(掛起)修改后的源代碼.如,選擇Break功能并修改代

      碼后,只要選擇Apply Code Changes(Alt+F10)就能將修改后的代碼應用到正在調試的程序當中.

    5. Show Next Statement(Alt+Num*):此功能將顯示程序代碼的下一條語句,如果源代碼中找不到,則在Disassembly窗口中顯示語句.

      當在Disassembly窗口中顯示時,可以單擊Disassembly 返回到源代碼窗口.

    6. Step Into(F11):此功能可以單步進入到在調試過程中所跟蹤的調用函數的語句的函數內部.如,當前語句是"d.Display()",

      選擇Step Into(F11)后,Debugger將進入Display()函數內部并停在Display()函數內部的第一條語句上.(此時,

      就可以Step Over(F10)對Display()函數進行單步調試了.)

    7. Step Over(F10):此功能可以單步對所在函數單步調試,如果調試的語句是一個調用函數的語句時,

      Debugger將全速執行所調用的函數,單步(一步)通過所調用的函數,Debugger停該調用語句的下一條語句上.

    8. Step Out(Shift+F11):此功能將使Debugger切換回全速執行到被調用函數結束,并停在該函數調用語句的下一條語句上.

      當確定所調用的函數沒有問題時可以用這個功能全速執行被調用函數.

    9. Run to Cursor(Ctrl+F10):此功能將全速執行到包含插入點光標所在的行,可以作為在插入點光標處設置常規斷點的一種選擇.

      注意,當光標處不是一個有效的執行語句時此功能將不起作用.

    10. Go(F5):此功能將全速執行程序直到遇到一個斷點或程序結束,或直到程序暫停等待用戶輸入.

      注意,此功能最能有效的調試循環,常將斷點設置在循環體內,重復的按F5全速執行循環體可以測試循環過程中的產生的變化.

    11. Step Into Specific Function:此功能可以可以單步通過程序中的指令,并進入指定的函數調用,此功能對于函數的嵌套層不限.

      ? ?

      ? ?

      ? ?

      ? ?

    調試常用快捷鍵

    單步進入

    F11

    單步跳過

    F10

    單步跳出

    SHIFT+F11

    運行到光標

    CTRL+F10

    開關斷點

    F9

    清除斷點

    CTRL+SHIFT+F9

    Breakpoints(斷點管理)

    CTRL+B 或ALT+F9

    GO

    F5

    Compile(編譯,生成.obj文件)

    CTRL+F7

    Build(組建,先Compile生成.obj再Link生成.exe)

    F7

    ? ?

    From 《Visual C++ Debugger》

    ? ?

    Debug Menu From MSDN

    Start Debug Commands (Build menu)

    Menu
    command


    Action

    Go

    Executes code from the current statement until a breakpoint or the end of the program is reached, or until the application pauses for user input. (Equivalent to the Go button on the toolbar.)

    Step Into

    Single-steps through instructions in the program, and enters each function call that is encountered.

    Run to Cursor

    Executes the program as far as the line that contains the insertion point. This is equivalent to setting a temporary breakpoint at the insertion point location.

    Attach to Process

    Attaches the debugger to a process that is running. Then you can break into the process and perform debugging operations like normal.

    When you begin debugging, the Debug menu appears, replacing the Build menu on the menu bar. You can then control program execution using the commands

    listed in the following table.

    Debug Menu Commands that Control Program Execution

    Debug menu
    command


    Action

    Go

    Executes code from the current statement until a breakpoint or the end of the program is reached, or until the application pauses for user input. (Equivalent to the Go button on the Standard toolbar.) When the Debug menu is not available, you can choose Go from the Start Debug submenu of the Build menu.

    Restart

    Resets execution to the first line of the program. This command reloads the program into memory, and discards the current values of all variables (breakpoints and watch expressions still apply). It automatically halts at the main( ) or WinMain( ) function.

    Stop Debugging

    Terminates the debugging session, and returns to a normal editing session.

    Break

    Halts the program at its current location.

    Step Into

    Single-steps through instructions in the program, and enters each function call that is encountered.? When the Debug menu is not available, you can choose Step Into from the Start Debug submenu of the Build menu.

    Step Over

    Single-steps through instructions in the program. If this command is used when you reach a function call, the function is executed without stepping through the function instructions.

    Step Out

    Executes the program out of a function call, and stops on the instruction immediately following the call to the function. Using this command, you can quickly finish executing the current function after determining that a bug is not present in the function.

    Run to Cursor

    Executes the program as far as the line that contains the insertion point. This command is equivalent to setting a temporary breakpoint at the insertion point location. When the Debug menu is not available, you can choose Run To Cursor from the Start Debug submenu of the Build menu.

    Step Into Specific Function

    Single steps through instructions in the program, and enters the specified function call. This works for any number of nesting levels of functions.

    The following additional commands appear on the Debug menu:

    Exceptions

    Displays the Exceptions dialog, which you can use to specify how you want the debugger to handle your program exceptions.

    Threads

    Displays the Threads dialog, which you can use to suspend, resume, or set focus to progam threads.

    Show Next Statement

    Shows the next statement in your program code. If source code is not available, displays the statement within the Disassembly window.

    QuickWatch

    Displays the Quick Watch window, where you can work with expressions.

    ? ?

    ? ?

    From 《visual C++ 6.0開發工具與調試》

    1、????????? 如何快速地范代碼縮進格式

    中所需要范的代,按shift+F8

    2、????????? 如何在Release狀態調試

    Project->Setting=>ProjectSetting對話框,選擇Release狀態。C/C++標簽中的CategoryGeneral,OptimizationsDisable(Debug),

    Debut infoProgram Database。在Link標簽中Generate debug info復選框。

    ? ? ?

    注:只是一介乎Debug合Release的中間狀態,所有的ASSERT、VERIFY都不起作用,函數調用方式已正的調用,而不表,

    但是這種狀態下QuickWatch、調列跟蹤功能仍然有效,和Debug版一

    ? ? ?

    3、????????? Release和Debug有什不同。

    Release版稱為發行版,Debug版稱為調試版。

    Debug中可以行、跟蹤等功能,但生成的可行文件比大,代碼運行速度慢。Release版行速度快,可行文件小,

    但在其編譯條件小無法調試功能。

    Release的exe文件接的是準的MFC DLL(Use MFC in a shared or static dll),比如MFC42.DLL。些DLL在安裝Windows的候,

    配置,所以些程序能有安裝Visual C++ 6.0的機器上行。而Debug版本的exe接了調試版本的MFC DLL文件,如MFC42D.DLL。

    有安裝Visual C++6.0的機器上不能行,因缺MFC42D.DLL等,除非選擇use static dll when link。

    ? ? ?

    4、????????? ASSERT和VERIFY有什么區別

    ASSERT里面的容在Release版本中不編譯,VERIFY里面的容仍然翻,但不再判斷真假。所以后者更安全一點。

    例如ASSERT(file.Open(strFileName))。

    一旦到了Release版本中,一行就忽略了,file根本就不Open()了,而且有任何出的信息。如果用VERIFY()就不這個問題

    ? ? ?

    5、????????? Workspace和Project之是什么樣

    Workspace可以包括幾project,但只有一個處于Active狀態,各project之可以有依賴關系,在project的Setting..中可以定,

    比如那Active狀態的project可以依于其他的提供其函數調用的靜態庫

    ? ? ?

    6、????????? 如何在非MFC程序中使用ClassWizard

    在工程目下新建一空的.RC文件,然后加入到工程中就可以了。

    ? ? ?

    7、????????? 如何

    按F9在前光標處增加一個斷點和取消一個斷點。

    另外,在編輯狀態下,按Ctrl+B對話框。然后單擊【Condition…】按鈕彈件的對話置。

    ? ? ?

    8、????????? 編輯狀態發現成員變量或函數不能顯示提示是如何打開顯示功能

    似乎是目前這個Visual C++ 6.0版本的一bug,可按如下步使其正常,如再出,可如法炮制:

    (1)???????????? 關閉Project

    (2)???????????? 除"工程名.ncb"文件

    (3)???????????? 重新打工程

    ? ? ?

    9、????????? 如何ClassWizard生成的類徹

    首先在工作的FileView中該類的.h和.cpp文件,按delete除,然后在文件管理器中將這兩個文件除,再行ClassWizard,

    這時是否移走該類的提示,選擇remove就可以了。

    ? ? ?

    10、???? 如何再workspace中消失的找出

    開該類對應文件,然后便改一下,這個時候工作新的,再將這個類改回原的名字就可以了。

    ? ? ?

    11、???? 如何清除所有的

    【Edit】->【Breakpoints…】,打"Breakpoints"對話框,單擊【Remove All】按即可。

    快捷是"Ctrl + Shift + F8"。

    ? ? ?

    12、???? 如何再ClassWizard中選擇未列出的信息

    "ClassWizard"對話框,然后切到"Class Info"面。改"Message filter",如選擇"Window","Message"面就Window的信息。

    ? ? ?

    13、???? 如何檢測程序中的括是否匹配

    把光到需要檢測的括前面,按快捷"Ctrl + ]"。如果括匹配正確,光就跳到匹配的括號處,否不移

    且機箱喇叭還會發出一警告。

    ? ? ?

    14、???? 如何看一宏(或量、函)的定

    把光到要看的一宏上,就比如最常的DECLARE_MAP_MESSAGE上按一下F12(或右中的相),

    如果有建立瀏覽文件,就提示對話框,按【確定】按,然后就跳到宏(或量、函)定的地方。

    ? ? ?

    15、???? 如何添加Lib文件到當前工程

    單擊菜單【Project】->Settings…】彈出"Project Setting"對話框,切換到"Link"標簽頁,在"Object/library modules"處輸入Lib文件名稱,

    不同的Lib之間用空格格開。

    ? ? ?

    16、???? 如何快速刪除項目下的Debug文件夾中臨時文件

    在工作區的FileView視圖中選中對應的項目,單擊右鍵彈出菜單,選擇【Clean(selection only)】菜單即可。

    ? ? ?

    17、???? 如何快速生成一個現有工程除了工程名外完全相同的新工程。

    在新建工程的"New"對話框中選擇"Custom Appwizard"項,輸入新工程的名字,單擊【OK】按鈕。出現"Custom AppWizard"項,

    輸入新工程的名字,單擊【OK】按鈕。出現"Custom AppWizardStep 1 of 2"對話框,選擇"An existing Project"項,單擊【Next】按鈕。

    出現"Custom AppWizardStep 2 of 2"對話框,選擇現有工程的工程文件名,最后單擊【Finish】按鈕。編譯后就生成一個與現有工程相同

    但可以重新取名的工程AppWizard

    現在就可以項用MFC AppWizard一樣用這個定制的向導。如果不想用了,可以在Visual C++ 6.0安裝目錄下Common\MSDev98\Template目錄

    中刪除該Wizard對應的.awx.pdb文件。

    ? ? ?

    18、???? 如何解決Visual C++ 6.0不正確連接的問題

    情景:明明之間改動了一個文件,卻要把整個項目全部重新編譯鏈接一次。剛剛鏈接好,一運行,有提示重新編譯鏈接一次。

    這是因為出現了未來文件(修改時間和創建時間比系統時間晚)的緣故。可以這樣處理:找到工程文件夾下的debug目錄,

    將創建和修改時間都比系統時間的文件全部刪除,然后再從新"Rebuild All"一次。

    ? ? ?

    19、???? 引起LNK2001的常見錯誤都有哪些

    遇到的LNK2001錯誤主要為:unresolved external symbol "symbol"

    如果鏈接程序不能在所有的庫和目標文件內找到所引用的函數、變量或標簽,將產生此錯誤信息。

    一般來說,發生錯誤的原因有兩個:一時所引用的函數、變量不存在,拼寫不正確或者使用錯誤;其次可能使用了不同版本的鏈接庫。

    一下是可能產生LNK2001錯誤的原因:

    <1>由于編碼錯誤導致的LNK2001錯誤

    1. 不相匹配的程序代碼或模塊定義(.DEF)文件導致LNK2001。例如,如果在C++源文件了內聲明了一變量"var1",

      卻視圖在另一個文件內以變量"var1"訪問改變量。

    (2)???????????? 如果使用的內聯函數是在.cpp文件內定義的,而不是在頭文件內定義將導致LNK2001錯誤。

    (3)???????????? 調用函數是如果所用的參數類型頭函數聲明是的類型不符將會產生LNK2001錯誤。

    (4)???????????? 視圖從基類的構造函數或析構函數中調用虛擬函數時將會導致LNK2001錯誤。

    (5)???????????? 要注意函數和變量的可公用性,只有全局變量、函數時可公用的。靜態函數和靜態變量具有相同的使用范圍限制。

    當試圖從文件外部方位任何沒有在該文件內聲明的靜態變量時將導致編譯錯誤或LNK2001錯誤。

    <2>由于編譯和聯機的設置而造成的LNK2001錯誤

    1. 如果編譯時使用的時/NOD(/NODERAULTLIB)選項,程序所需要的運行庫和MFC時將得到又編譯器寫入目標文件模塊,

      但除非在文件中明確包含這些庫名,否則這些庫不會北鏈接進工程文件。這種情況下使用/NOD將導致LNK2001錯誤

    2. 如果沒有為wWinMainCRTStartup設定程序入口,在使用UnicodeMFC時講的到

      "unresolved external on _WinMain@16"的LNK2001錯誤信息。

    3. 使用/MD選項編譯時,既然所有的運行庫都被保留在動態鏈接庫之內,源文件中對"func"的引用,

      在目標文件里即對"__imp__func"的引用。如果試圖使用靜態庫LIBC.LIBLIBCMT.LIB進行鏈接,將在__imp__func上發生LNK2001錯誤。如果不使用/MD選項編譯,在使用MSVCxx.LIB鏈接時也會發生LNK2001錯誤。

    (4)???????????? 使用/ML選項編譯時,如用LIBCMT.LIB鏈接回在_errno上發生LNK2001錯誤。

    (5)???????????? 當編譯調試版的應用程序時,如果采用發行版模態庫進行鏈接也會產生LNK2001錯誤;同樣,

    使用調試版模態庫鏈接發行版應用程序時也會產生相同的錯誤。

    (6)???????????? 不同版本的庫和編譯器的混合使用也能產生問題,因為新版的庫里可能包含早先的版本沒有的符號和說明。

    (7)???????????? 在不同的模塊中使用內聯和非內聯的編譯選項能夠導致LNK2001錯誤。如果創建C++庫時打開了

    函數內聯(/Ob1/Ob2),但是在描述該函數的相應頭問卷安里卻關閉了函數內聯(沒有inline關鍵字)

    只是將得到錯誤信息。為避免該問題的發生,應該在相應的頭文件中用inline關鍵字標志為內聯函數。

    (8)???????????? 不正確的/SUBSYSTEMENTRY設置也能導致LNK2001錯誤。

    ? ? ?

    20、???? 如何調試一個沒有源碼的exe文件調用的dll

    Visual C++ 6.0中,進入"Project Setting"對話框然后選擇Debug標簽頁。通常Visual Studio默認"executable for debug session"為可執行文件名,

    但可以將他改成任何你想要的程序。甚至可以指定不同的工作目錄以及傳遞參數到你的程序。這個技術常用來調試Dlls、名字空間擴展、

    COM對象和其他從某些EXE以及從第三方的EXE中調用的plug-in程序。

    ? ? ?

    21、???? Visual C++ 6.0工程中的項目文件都表示什么。

    .opt:工程關于開發化境的參數文件。如工具條位置等信息。

    .aps(AppStudio File)資源輔助文件,二進制格式,一般不用去管他。

    .clwClassWizard信息文件,實際上是INI文件格式,又興趣可以研究一下。有時候ClassWizard出了問題,手工修改CLW文件可以解決。

    如果此文件不存在的話,每次用ClassWizard的時候回提示是否重建。

    .dsp(DevelopStudio Project):項目文件,文本格式,不過不熟悉的或不要手工修改。

    .dsw(DevelopStudio Workspace):是工作區文件,其他特點和.dsp差不多。

    .plg:是編譯信息文件,編譯時的errorwarning信息文件(實際上時一個html文件),一般用處不大。在單擊菜單【Tool】->Option

    彈出的對話框里面有個選項可以控制這個文件的生成。

    .hpj(Help Project):是生成幫助文件的工程,用microsoft Help Compiler可以處理。

    .mdp(Microsoft DevStudio Project):是舊版本的項目文件,如果要打開此文件的話,回提示你是否轉換成新的.dsp格式。

    .bsc:是用于瀏覽項目信息的,如果用Source Brower的話舊必須又這個文件。如果不用這個功能的話,可以在Project Options里面去掉

    Generate Browse Info File,這樣可以加快編譯速度。

    .map是執行文件的影像信息記錄文件,除非對系統底層,這個文件一般用不著。

    .pch(Pre-Compiled File):是與編譯文件,可以加快編譯速度,但是文件非常大。

    .pdb(Program Database),記錄了程序有關的一些數據和調試信息,在調試的時候可能有用。

    .exp:只有在編譯DLL的時候才會生成,記錄了DLL文件的一些信息,一般也沒有用。

    .ncb:無編譯瀏覽文件(no compile browser)。當自動完成功能出問題時可以刪除此文件。編譯工程后回自動生成。

    ??????????????????????????????????????????????????????????????????????????????????????????????????聲明:以上為從的個人初學時的學習筆記中整理制作而成,有不當之處請自行更正.

    ?????????????????????????????????????????????????????????????????????∪∩BUG

    ??


    評論

    # re: Visual C++ 6.0調試功能 圖解教程(1)--快速入門[未登錄]  回復  更多評論   

    2008-10-09 12:33 by Bright
    看了以后幫助很大,多謝

    # re: Visual C++ 6.0調試功能 圖解教程(1)--快速入門  回復  更多評論   

    2009-08-23 00:21 by QQ:372364267
    么的說

    # re: Visual C++ 6.0調試功能 圖解教程(1)--快速入門  回復  更多評論   

    2010-05-29 13:40 by laomadeCD
    謝謝LZ,受用了。。。

    # re: Visual C++ 6.0調試功能 圖解教程(1)--快速入門  回復  更多評論   

    2011-09-18 20:05 by bex
    真好,感謝

    # re: Visual C++ 6.0調試功能 圖解教程(1)--快速入門  回復  更多評論   

    2012-04-17 20:30 by yxb
    太感謝啦,贊LZ.

    # re: Visual C++ 6.0調試功能 圖解教程(1)--快速入門  回復  更多評論   

    2013-05-21 15:26 by 墨色
    表示感謝的說

    # re: Visual C++ 6.0調試功能 圖解教程(1)--快速入門  回復  更多評論   

    2015-03-11 22:26 by huqimei
    不錯不錯,謝謝!
    主站蜘蛛池模板: 亚洲人成无码网站在线观看| 亚洲精品二三区伊人久久| 五月天婷婷免费视频| 国产色婷婷精品免费视频| 老牛精品亚洲成av人片| 免费国产不卡午夜福在线 | 亚洲中文字幕无码一久久区| 日本高清不卡中文字幕免费| 亚洲av日韩片在线观看| 一级美国片免费看| 亚洲人成网亚洲欧洲无码久久| 岛国精品一区免费视频在线观看| 亚洲国产精品无码专区| 99久久免费观看| wwwxxx亚洲| 一区国严二区亚洲三区| 97超高清在线观看免费视频| 亚洲精品视频在线| 毛片免费视频观看| 亚洲成a人片在线不卡一二三区| 亚洲JIZZJIZZ中国少妇中文| a级毛片毛片免费观看永久| 亚洲国产成a人v在线| 日韩成人免费视频播放| 国产区在线免费观看| 亚洲精品自拍视频| 日本免费人成视频播放| 香蕉视频在线免费看| 亚洲性色成人av天堂| 国产91久久久久久久免费| 免费国产叼嘿视频大全网站| 亚洲乱理伦片在线观看中字| 亚洲自偷自偷在线制服 | 国产精品久久免费视频| 毛片基地看看成人免费| 亚洲免费观看网站| 亚洲天堂在线视频| 成人免费视频77777| 伊人久久大香线蕉免费视频| 亚洲国产日韩精品| 亚洲国产精品特色大片观看完整版|