首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 请教大家是如何使用VC的debug功能的?
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-01 14:02:54 楼主
    我现在用vs2005,不过从以前的vc6起就一直不太会用那些debug功能。一般语法错误就直接根据编译提示找,逻辑错误我总是在可疑的地方加条输出语句,看在这一步的实际输出是不是符合预计输出,以确认bug的位置。请问我这样的调试习惯好么?是不是利用vc自带的debug功能会方便很多? 想向大家请教下程序员调试程序一般的debug过程。 谢谢!
    20  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-01 14:09:181楼 得分:0
    设断点, F9
    再按 F10
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-01 14:11:332楼 得分:0
    1.调试快捷键

      F9——在当前光标所在的行下断点,如果当前行已经有断点,则取消断点.
      F5——调试状态运行程序,程序执行到有断点的地方会停下来.
      F10——单步执行程序.
      F11——和F10的区别是,如果当前执行语句是函数调用,则会进入函数里面.
      CTRL+F10——运行到光标所在行.
      SHIFT+F11——跳出当前所在函数.

      特别说明:

      a.有的地方不能下断点.比如空行,基本类型定义语句(不初始化),等等非执行语句.比如

      int            i;                      // 此行不能下断点  字串7
      int            j = 0;                  // 这里可以下
      CString        str;                    // 这里可以下
      int            k = Max(i, j);          // 这里可以下

      b.不是所有断点都会(断).比如下断点的语句在程序里面没有被执行.

      c.此外,ALT+F9还可以下条件断点,不过这个不常用,有兴趣的可以自己研究:)

      2.如何调试Release版的程序?

      有些程序在debug下运行的很好,但在release下却总是失败,默认情况下release是不能调试的.怎么解决呢?

      其实"debug"和"release"都只是一个代号而已,各自对应一组不同的编译选项.

      在release的默认设置下,ALT+F7 ,调出工程设置对话框,切换到link选项卡,勾选"Generate debug info",然后再切换到C/C++选项卡,在"Optimizations"里面选"Disable(Debug)",在下面的"Debug info"里面选"Program Database for Edit and Continue".然后点OK保存设置,重新编译程序,下断点即可.

      3.上面两点已经能应付很多种情况了,但是有时候即使在debug下也不能下断点,我以前也曾经遇到过这种问题,一个调了4层的dll,就是不能下断点.其实还除了上面的方法,还有一种最底层的实现技术:使用汇编.

      细心的人可能会发现,有时候在调试状态下当程序出现异常的时候,光标会指向汇编代码,而这个代码就是int 3,这其实是一个中断.

      在你的代码的任意地方加上

      __asm{
          int 3
      };

      用debug编译,然后直接运行程序.当程序执行到上述代码的时候,就会出现一个框,告诉你说一大堆信息,说程序错了,下面有"调试"、"终止"、"忽略",不用理,点调试就可以进入跟 踪了。这种方法我还没有失手过:)
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-01 14:11:543楼 得分:0
    这个是经常要用到的,在它的下列菜单下有一个step into 程序写好了以后从debug进入step into 然后根据提示按F10,程序上面就会出现一个标记,可以清楚的看出程序一步一步和运行结果
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-01 15:00:294楼 得分:0
    谢谢大家热心回复!尤其是Supper_Jerry 朋友。

    关于Release版本,我以前只理解它是在编译时的优化版本。但平时我都是直接F5生成exe文件的,不知道如何才能生成release版本呢?

    还有就是不知道有没有step forward (相反于F10)这种功能?如果没有的话是不是不小新跳过了就得重新再debug一遍呢?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • akirya
    • 等级:
    发表于:2008-03-01 15:49:125楼 得分:0
    断点单步,看变量值.
    debug还是release在窗口上有选项的
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-03 13:18:176楼 得分:0
    回帖是一种美德!传说每天回帖既可获得 10 分可用分!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-03 23:39:557楼 得分:0
    看内存,看反汇编,监视变量,看调用栈,然后还看寄存器值
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-04 00:08:438楼 得分:0
    断点
    条件断点
    输出断点
    。。。
    Watch
    。。。

    都很好用啊
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-04 14:17:059楼 得分:0
    单步啊,变量跟踪啊,内存跟踪啊
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-04 19:31:1310楼 得分:0
    。。。。。。。。。
    有这个DEBUG的书吗?好像对学习很有帮助~~~~~
    我懒的每次都用cout来看变量~~~~~~~~~
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-04 19:51:4311楼 得分:0
    设置断点 顺序执行 执行到标记位置的时候 VC会告诉你内存里变量的值的 显示位置就在报错那个位置``是一个表格形式的
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-06 12:53:1912楼 得分:0
    运行过头了,想返回前几行重新运行,可以在要运行的行上点右键:Set Next Statement

    注意,这时候有些变量的状态可能已经改变,需要重新设置一下


    另外,前面孩子说的用__asm int 3加断点的方法,Release版编译一样管用,不只是Debug才行~

    有本《Windows程序调试》,很不错~ 可以google之~
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • canybox
    • 等级:
    发表于:2008-03-06 22:54:0513楼 得分:0
    F9设置断点。。。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • crazypeter2005
    • 等级:
    发表于:2008-03-12 18:39:4714楼 得分:0
    补充我常用的,Ctrl-返回之前看的代码.Ctrl+Alt+Q查某个变量的即时值.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-12 22:13:0915楼 得分:0
    学习一下~
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-13 09:23:4516楼 得分:0
    学习中....
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-14 14:55:1317楼 得分:0
    刚开始学习!!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-14 16:43:0018楼 得分:0
    刚学习
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-14 17:37:4419楼 得分:0
    学习了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-14 21:57:2520楼 得分:0
    学习了 谢谢
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-15 23:49:2621楼 得分:0
    Ctrl+Alt+F9清除所有断点
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-01 05:20:5122楼 得分:0
    接分是王道!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-01 11:26:3723楼 得分:0
    我也想知道,正在找這方面的資料~~~~~
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    世纪乐知(北京)网络技术有限公司 版权所有 京 ICP 证 020026 号
    Copyright © 2000-2007, CSDN.NET, All Rights Reserved