CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

vc中这种情况怎么调试。。。

楼主boyb()2005-02-01 17:16:10 在 C/C++ / C语言 提问

如下变量:  
  char   *g_str   =   NULL;  
  g_str   =   (char*)malloc(100);  
  strcpy(g_str,"hello   world");  
   
          当程序运行的时候,发现字符串g_str的内容被莫名其妙地改变了,并且从代码看没有任何其地方  
  对字符串进行了操作。根据我以往的经验,这种情况往往是由于别的程序段进行了越界操作,从而  
  引起了g_str指向的内存被改写了。  
          如果程序很小,仔细地看看代码往往可以解决问题,但如果代码量非常大,找起来就非常  
  费力了。  
          我是这样尝试解决问题的:  
          在vc中设置数据断点,步骤是这样的:  
                  点菜单edit-->breakpoints-->data选项卡下  
  enter   the   expression   to   be   evaluated下面的框中输入   g_str[5]      
  注:监视数组元素g_str[5]的变化,这样如果别的程序段改写了这段内存块,调试的时候就应该在  
  改变的地方停下来,就能够找到出问题的代码了。  
       
            但是当调试运行程序时,vc提示这个断点设置无效,然后就停在了程序的入口点。  
   
  =====================  
  另外如果这样定义g_str:  
          char   g_str[100];  
          strcpy(g_str,   "hello   world");  
   
  接下来按上面的步骤设置断点,可以入我所料,能够找到越界的代码段,从而解决问题。  
   
          但这只是权宜之计,如果整个程序大环境不允许用char   g_str[100],只能用前面指针的  
  方式,应该怎么查处有问题的代码呢??  
          大虾们帮忙看看,鞠躬ing...  
   
   
           
   
  问题点数:20、回复次数:5Top

1 楼darkstar21cn(≮天残≯无畏)(死亡进行时)回复于 2005-02-01 17:54:09 得分 4

char   *g_str   =   NULL;  
  g_str   =   (char*)malloc(100);  
  strcpy(g_str,"hello   world");  
   
   
  把他该成const   char   g_str[]   =   "hello   world";  
  让编译器给你找发生改动的地方。Top

2 楼boyb()回复于 2005-02-01 20:25:48 得分 0

to   darkstar:  
        这个例子是我从原来的工程中抽出来的,因为原来工程里相关代码并不是我举的例子这样,所以要是原样搬到这个贴子来更加说明不了问题。那个工程非常大,涉及到相关的数据结构非常多,如果按照你建议这种方法改起来基本是行不通的。谢谢你  
         
        有没有更好的方法可以直接监视动态分配的内存内容的变化呢???  
   
  Top

3 楼fancyf(凡瑞)回复于 2005-02-01 20:39:14 得分 4

VC可以将断点触发的条件设置为“已更改”,就是当某变量值更改以后这个断点才起作用,方法是右键单击断点,选“属性”,再选“条件”。  
  这个办法可能能解决你的问题。  
   
  不知道具体位置,就多设几个断点,逐步缩小范围Top

4 楼jiangsheng(蒋晟.Net[MVP])回复于 2005-02-02 08:22:46 得分 12

如果是全局变量,把变量修改成单实例的类成员。在造成崩溃的语句之前设置断点,用VC的监视功能观察类对象的数据是否合法。查找对第一个不合法成员的引用。  
  Top

5 楼boyb()回复于 2005-02-02 10:08:19 得分 0

to   jiangsheng:  
        多谢指点!  
        你说的我不大能理解,能说得详细点吗?关键是不知道哪条语句造成了崩溃,程序的表现不是崩溃,而是不正常了。  
        另外,这个工程都是用c写的,没有类。Top

相关问题

  • 怎么用VC 6.0调试?
  • 怎么在VC里调试Shell
  • 刚学vc,请问怎么用vc调试winapi程序
  • VC调试问题???
  • vc调试问题
  • vc调试问题
  • 请问VC怎么带参数调试?谢谢
  • 怎么设置VC为缺省的调试环境?
  • 怎么用Vc调试dos程序?小小菜鸟问
  • 求救:用VC怎么调试程序(怎样设断点)

关键词

  • 断点
  • 代码
  • 监视
  • 内存
  • vc
  • 解决
  • 调试
  • 程序
  • 变量
  • 工程

得分解答快速导航

  • 帖主:boyb
  • darkstar21cn
  • fancyf
  • jiangsheng

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo