【请教】VC2005 release下如何断点调试? 在我的程序里,有部分数据是存放在数组里的,这些数组变量是通过new出来的动态数组,在debug和release的条件下发现得到的结果居然不一样,所以想请教高手VC2005在release下如何断电调试,谢谢~ 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 一般来说Debug模式才是用来调试的,Release不要进行调试。有时候在Release模式下调试会发现有乱码的,而且程序的跳转也不正常。这2种模式的编译模式不一样,Debug更宽松些。如果设断点跟代码还是到Debug下吧。 楼上得兄弟,我也知道这个道理,但是我想破头皮还找不出问题只要是通过new方法生成的变量我都初始化了啊,按理来说不会有问题的,但是在release下的结果明显出错了而debug下就可以正常得到结果 高手们给个意见啊~~我所有动态产生的数组都是如下操作的:1.在头文件里: st** st1;2.在构造函数里: st1=new st*[dim_X]; //dim_X是第一维的长度 for(int i=0;i<dim_X;i++) st1[i]=new st[dim_Y]; //dim_Y是第二维的长度3.在析构函数里 for(int i=0;i<dim_X;i++) delete[] st1[i]; //dim_Y是第二维的长度 delete st1;4. 在我的程序其他函数中使用st1数组。/////////////////////////////////////////////////////////debug下完全正确,一release过后产生的结果就有错误!! 结果不一样是指什么,也有可能是指针越界操作什么的最好在Debug模式下面调试 析构的时候有问题吧for(int i=0;i <dim_Y;i++)delete []st1; debug模式下完全找不到错误啊结果是指我程序的其他函数里的运算结果嘛,而且运算结果是存在float型数组里的,上面说的st1数组是结构体类型的数组,在运算过程中使用到的,保存的结果不是st1里的内容 TO:jingzhongrong 二维数组是这样释放内存吗?? 怀疑唉... 汗……看错……真是不好意思可能是其他问题吧delete []st1这句还是这样写好 你试试在new出每一个st结构后用memset(&st,0,sizeof(st)) TO:jingzhongrong 按照你8楼提供的写法在析构时报错的,我刚才试过了,你意思是不是最好用下面的写法?for(int i=0;i <dim_Y;i++) delete st1[i];delete []st1; 在编译选项里选上编译时生成.map及.cod文件,这样出错时可以根据堆栈信息可以找到具体的某一行代码。如果你的程序没有出错堆栈信息,可以使用drwatson。 TO:jingzhongrong 按照你在12楼的做法后,在debug下调试没有出错,但是在运行的时候有错误指向其他函数中的st1,并且弹出错误提示框如下:Unhandled exception at 0x004190bc in FLP.exe: 0xC0000005: Access violation reading location 0x00000000. st1=new st*[dim_X]; //dim_X是第一维的长度 for(int i=0;i <dim_X;i++) { st1[i]=new st[dim_Y]; //dim_Y是第二维的长度 for(int j = 0; j < dim_Y; j++) memset(&st1[i][j],0,sizeof(st)); } 析构 for(int i=0;i <dim_X;i++) delete []st1[i]; delete []st1; 你的st结构是什么呢 TO:jingzhongrong 用mmset跟没有用效果一样的啊,在release下得不到正确得结果... debug编译没有错误不代表程序没有错误,运行没有错误也不代表程序没有错误。Debug和Release编译出的代码不一样,内存分配布局也不一样,对代码错误的表现也不一样。建议你尝试如下措施:1、尽可能在数组访问的时候加上索引越界检查。2、变量,特别是指针变量要初始化。3、如果以上措施都不见效,那么关闭Release的速度优化试一下。 楼上的兄弟,我是新手,请详细点说:1. 如何对数组在访问时做索引越界检查?2. 变量初始化应该就是我6楼中第2步中的写法吧?3. VC2005在哪里关闭Release的速度优化??我很晕.. 如果你按16楼那样写的话出现Access violation基本就是指针使用有问题,在数组初始化这里没有问题。Debug没有错误不代表就没有错误,只不过你没有发现而已不要把视线都放在数组初始化这里, 我按16楼那样写的,没有出现Access violation的错误其他地方的错误仍在继续挖掘中,快崩溃了~~ 1、访问数组的时候确认一下下标是否在正确范围内。可用ASSERT(),Debug下调试。用MessageBox报告也行,Release下也可报告。2、6楼的代码应该是没有问题的3、在【项目】【属性】【配置属性】【C/C++】【优化】选“禁用”即可。该方法是掩盖问题,着急交货的话可以用用。强烈不推荐。 看你的代码,如果0 <= x <= dim_X-10 <= y <= dim_Y-1 就不越界,否则的话,用MessageBox报告 你得确定每一个 new都成功了,你这样光new没检测。 To:qiqi5521 我对所有的数组变量都用MessageBox做报告测试了,没有出现问题,还有我在debug下花了一个晚上用手算了几个例子,都显示debug下算的是正确结果,但是release下的运算结果就明显错了TO:jennyvenus 如何能看出每一个new都成功了?我在debug下用断点跟踪发现都成功了啊~ release下如何发现是否成功??谢谢大家热心帮助..... 检查是否为NULL就可以了。if( NULL == 变量 )没new成功 如何使用TTS播放语音 招聘要求 关于静态成员函数实现多线程的一个问题 为什么我的http代理返回的数据,浏览器显示不了? OnReceive不能被触发 郁闷中。。。,创建的LISTBOX不能滚动 关于控件MSComm ▲▲ dialog的简单问题,请进 ▲▲ ★★★100分请教ADO简单问题: 使用_RecordsetPtr::Open("Select * from TestTable"...)返回记录集时,如何设置为异步执行方式??? Window SDK 7.1安装失败 屏幕截词 大问题!!! VC下编译出奇怪的问题
有时候在Release模式下调试会发现有乱码的,而且程序的跳转也不正常。这2种模式的编译模式不一样,
Debug更宽松些。
如果设断点跟代码还是到Debug下吧。
只要是通过new方法生成的变量我都初始化了啊,按理来说不会有问题的,但是在release下的结果明显出错了而debug下就可以正常得到结果
我所有动态产生的数组都是如下操作的:1.在头文件里:
st** st1;
2.在构造函数里:
st1=new st*[dim_X]; //dim_X是第一维的长度
for(int i=0;i<dim_X;i++)
st1[i]=new st[dim_Y]; //dim_Y是第二维的长度3.在析构函数里
for(int i=0;i<dim_X;i++)
delete[] st1[i]; //dim_Y是第二维的长度
delete st1;4. 在我的程序其他函数中使用st1数组。
/////////////////////////////////////////////////////////debug下完全正确,一release过后产生的结果就有错误!!
也有可能是指针越界操作什么的最好在Debug模式下面调试
结果是指我程序的其他函数里的运算结果嘛,而且运算结果是存在float型数组里的,上面说的st1数组是结构体类型的数组,在运算过程中使用到的,保存的结果不是st1里的内容
二维数组是这样释放内存吗?? 怀疑唉...
memset(&st,0,sizeof(st))
按照你8楼提供的写法在析构时报错的,我刚才试过了,你意思是不是最好用下面的写法?for(int i=0;i <dim_Y;i++)
delete st1[i];
delete []st1;
如果你的程序没有出错堆栈信息,可以使用drwatson。
按照你在12楼的做法后,在debug下调试没有出错,但是在运行的时候有错误指向其他函数中的st1,并且弹出错误提示框如下:
Unhandled exception at 0x004190bc in FLP.exe: 0xC0000005: Access violation reading location 0x00000000.
st1=new st*[dim_X]; //dim_X是第一维的长度
for(int i=0;i <dim_X;i++)
{
st1[i]=new st[dim_Y]; //dim_Y是第二维的长度
for(int j = 0; j < dim_Y; j++)
memset(&st1[i][j],0,sizeof(st));
}
析构
for(int i=0;i <dim_X;i++)
delete []st1[i];
delete []st1; 你的st结构是什么呢
debug编译没有错误不代表程序没有错误,运行没有错误也不代表程序没有错误。Debug和Release编译出的代码不一样,内存分配布局也不一样,对代码错误的表现也不一样。建议你尝试如下措施:
1、尽可能在数组访问的时候加上索引越界检查。
2、变量,特别是指针变量要初始化。
3、如果以上措施都不见效,那么关闭Release的速度优化试一下。
1、访问数组的时候确认一下下标是否在正确范围内。可用ASSERT(),Debug下调试。用MessageBox报告也行,Release下也可报告。
2、6楼的代码应该是没有问题的
3、在【项目】【属性】【配置属性】【C/C++】【优化】选“禁用”即可。该方法是掩盖问题,着急交货的话可以用用。强烈不推荐。
0 <= x <= dim_X-1
0 <= y <= dim_Y-1
就不越界,否则的话,用MessageBox报告
我对所有的数组变量都用MessageBox做报告测试了,没有出现问题,还有我在debug下花了一个晚上用手算了几个例子,都显示debug下算的是正确结果,但是release下的运算结果就明显错了
TO:jennyvenus
如何能看出每一个new都成功了?我在debug下用断点跟踪发现都成功了啊~ release下如何发现是否成功??
谢谢大家热心帮助.....
没new成功