在VC中使用Debug

来源:互联网 发布:win7不能网络共享 编辑:程序博客网 时间:2024/05/16 11:19
  1. 选定Debug编译选项
    Build -> Set Active Configuration -> Win32 Debug
    或者在Build工具栏上的ListBox中选择Debug。
    Debug定义了_DEBUG宏,而Release定义了NDEBUG宏。
  2. 先按F12编译Browse信息
    这样编译后可以查到变量定义。 
  3. 执行Debug
    按F5(注意,如果按Ctrl+F5 是Run,起不到Debug的作用)。
    在Debug时一定要把Debug工具栏拉出来,方便调试。
  4. Breakpoints(F9)
    用Alt+F9可以对所有的断点进行编辑。

    对指令地址(EIP)指定断点
    当EIP的值为指定值时中断。如下图:是对SetWindowLong的地址进行设置的(注意:一定要在前面加0x)。


    对内存地址设置断点
    当指定内存地址发生变化时中断(在运行时设置才管用)。

  5. Show Next Statement(Alt+Num *)
    显示当前指令所处的代码位置
  6. Step Over(F10)
    单步追踪,遇到Call语句不进入
  7. Step Into(F11)
    单步追踪,遇到Call语句进入
  8. Step Out(Shift+F11)
    跳出当前函数调用
  9. Run to Cursor(Ctrl+F10)
    运行到光标所处位置
  10. Memory Leaks
    内存泄漏。要想检查到memory leaks,必须包含<afx.h>头文件(实际上是#pragma comment(lib, "mfc42ud.lib")在起作用)。
    注意:内存泄漏是一个十分严重的问题,尤其对于需要长时间运行的程序(进程长时间保留在内存中)更是如此。有一个重要的事实是,当进程正常退出时,操作系统负责清空该进程的所有内存。
  11. QuickWatch(Shift+F9)
    可以更改变量运行时的值。
  12. Watch窗口
    输入"err,hr"可以动态查看GetLastError信息。可以输入寄存器。
    (long *)ESP可以查看堆栈内容。
  13. Variables窗口
    当前函数的局部变量
  14. Registers窗口
    EIP、ESP、ECX

  15. Memory窗口
    对变量可以拖放。Options->Debug中可以设置

  16. Call Stack窗口


  17. Disassembly窗口
    Set next statement 跳过某些语句(有时用于Hack)

    Goto Source

    Ctrl+G

    在%system%目录下创建de.bat文件,内容如下:
    dumpbin /exports %1>a.txt
    a.txt
    对dll输出函数进行查看

    Apply Code Changes(Alt+F10)
    当处于Debugging状态时,如果更改了代码,可以执行此命令,可以使得重新编译后再运行到当前状态。

  18. Debug->Modules窗口


  19. Profile(Build菜单下)
    要先设置Project -> Settings -> Link -> Enable profiling

  20. ASSERT,VERIFY
  21. TRACE
    在Debug状态下输出,同时要求Enable tracing开启。

  22. AfxMessageBox
  23. cout,printf
    对控制台程序进行输出测试

  24. OutputDebugString
    在Debug和Release状态下都可以输出。

  25. DebugBreak,_asm{int 3}
    强制中断

  26. 如何对Release版本进行Debug
    进行如下设置,然后就可以进行Debug了。

    Settings -> C/C++ -> Category(General) -> Debug info=Program Database
    Settings -> Link -> Category(General) -> Generate debug info=true
  27. 输出汇编文件
    Project Settings中如下设置:


     则会产生相应的汇编文件 (*.asm / *.cod)

  28. 在Win32程序中输出字符串到控制台
    if (AllocConsole())
    {
    HANDLE hConsole;
    hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
    if (hConsole)
    {
    DWORD dwWritten;
    char sOut[]="This is a test string.\n";
    WriteConsole(hConsole, sOut, strlen(sOut), &dwWritten, NULL);
    }
    }
    //FreeConsole();
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 广州居住证回执单丢了怎么办 惠阳居住证回执单丢了怎么办 南京居住证换地方了怎么办 买家退回的商品有问题怎么办 农转农户口手续怎么办 原房东不迁户口我怎么办 户主信息页掉了怎么办 户主变了户口本首页怎么办 大人户口迁走小孩户口怎么办 网银转账处理中怎么办 教育部学籍在线验证报告有错怎么办 验证码连续输入三次错误怎么办 交通运输监察大队截车了怎么办 平安安康续保没成功怎么办 危险品经营许可证到期了怎么办 郑万350渝万怎么办 厂里饭堂的饭好难吃怎么办 学校的食堂饭菜不好不卫生怎么办 亲戚借钱我真没有怎么办 榴莲肉酸了吃了怎么办 亲戚赖在家里住怎么办 食堂饭菜味道差该怎么办 被监视居住公安打电话睡着了怎么办 鱼缺氧浮上水面怎么办 车载低音炮有电流声怎么办 925纯银变黑了怎么办 银子放久了变黑怎么办 高铁票网上售空怎么办 高铁票出票失败怎么办 高铁票名字打错怎么办 高铁票姓名错了怎么办 高铁票弄丢了怎么办 用过的车票丢了怎么办 高铁票被水洗了怎么办 沈阳地铁卡丢了怎么办 火车票没写检票口怎么办 吃鸡听的脚步声距离太近怎么办 检票时车票丢了怎么办 高铁出站没检票怎么办 高铁来不及取票怎么办 被发现假的增值税发票怎么办