51Halcon机器视觉

 找回密码
 会员注册

QQ登录

只需一步,快速开始

扫一扫,微信登录

查看: 1673|回复: 0

[资料] 在VC中使用Debug

[复制链接]
  • TA的每日心情
    开心
    5 小时前
  • 签到天数: 958 天

    连续签到: 3 天

    [LV.10]以坛为家III

    380

    主题

    1554

    帖子

    7300

    积分

    Rank: 9

    积分
    7300

    突出贡献优秀版主荣誉管理论坛元老切换助手验证会员最佳新人

    发表于 2016-7-7 23:38:16 | 显示全部楼层 |阅读模式

    51Halcon诚邀您的加入,专注于机器视觉开发与应用技术,我们一直都在努力!

    您需要 登录 才可以下载或查看,没有帐号?会员注册

    x
    在VC中使用Debug
    • 选定Debug编译选项
      Build -> Set Active Configuration -> Win32 Debug
      或者在Build工具栏上的ListBox中选择Debug。
      Debug定义了_DEBUG宏,而Release定义了NDEBUG宏。
    • 先按F12编译Browse信息
      这样编译后可以查到变量定义。
    • 执行Debug
      按F5(注意,如果按Ctrl+F5 是Run,起不到Debug的作用)。
      在Debug时一定要把Debug工具栏拉出来,方便调试。
    • Breakpoints(F9)
      用Alt+F9可以对所有的断点进行编辑。

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




      对内存地址设置断点
      当指定内存地址发生变化时中断(在运行时设置才管用)。
    • Show Next Statement(Alt+Num *)
      显示当前指令所处的代码位置
    • Step Over(F10)
      单步追踪,遇到Call语句不进入
    • Step Into(F11)
      单步追踪,遇到Call语句进入
    • Step Out(Shift+F11)
      跳出当前函数调用
    • Run to Cursor(Ctrl+F10)
      运行到光标所处位置
    • Memory Leaks
      内存泄漏。要想检查到memory leaks,必须包含<afx.h>头文件(实际上是#pragma comment(lib, "mfc42ud.lib")在起作用)。
      注意:内存泄漏是一个十分严重的问题,尤其对于需要长时间运行的程序(进程长时间保留在内存中)更是如此。有一个重要的事实是,当进程正常退出时,操作系统负责清空该进程的所有内存。
    • QuickWatch(Shift+F9)
      可以更改变量运行时的值。
    • Watch窗口
      输入"err,hr"可以动态查看GetLastError信息。可以输入寄存器。
      (long *)ESP可以查看堆栈内容。
    • Variables窗口
      当前函数的局部变量
    • Registers窗口
      EIP、ESP、ECX
    • Memory窗口
      对变量可以拖放。Options->Debug中可以设置
    • Call Stack窗口
    • 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状态时,如果更改了代码,可以执行此命令,可以使得重新编译后再运行到当前状态。
    • Debug->Modules窗口
    • Profile(Build菜单下)
      要先设置Project -> Settings -> Link -> Enable profiling
    • ASSERT,VERIFY
    • TRACE
      在Debug状态下输出,同时要求Enable tracing开启。
    • AfxMessageBox
    • cout,printf
      对控制台程序进行输出测试
    • OutputDebugString
      在Debug和Release状态下都可以输出。
    • DebugBreak,_asm{int 3}
      强制中断
    • 如何对Release版本进行Debug
      进行如下设置,然后就可以进行Debug了。

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


      则会产生相应的汇编文件 (*.asm / *.cod)
    • 在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();

    无效附件更新 权限提升操作 删帖申请 举报以及其他需要帮助请加入QQ群:214663141 广告位招商 有意者联系
    您需要登录后才可以回帖 会员登录 | 会员注册

    本版积分规则

    建议您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流浏览器浏览本网站

    51Halcon会员技术交流会员技术交流 | 51Halcon官方客服咨询官方客服咨询 | Halcon切换助手使用反馈切换助手使用

    有问题需要咨询站长?| 申请友链| 小黑屋| 手机版| Archiver|  

    粤ICP备15095995号-2 粤公网安备44030602000670号

    CopyRight © 2015-2020 51Halcon机器视觉. Tencent Cloud X3.4.

    快速回复 返回顶部 返回列表