clq
浏览(0) +
2010-04-05 10:32:54 发表
编辑
关键字:
void Ct3Dlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
try{
char * p = new char[1];
int i = 0;
i = 10/i;//这个错误在 clr 下能检测出
//tm * m = NULL;
//i = m->tm_hour;//这个错误在 clr 下能检测出
p += 5;//这个错误在 clr 下也没有检测出来//但是当 p 指针访问偏移太多,达到不可访问区时会报异常而不是崩溃
p += 5000;//但是当 p 指针访问偏移太多,达到不可访问区时会报异常而不是崩溃
*p = 'a';
printf("aaa%s", p);
}catch(...){}//这个可以跳过以上的 clr 异常
}
clq
仅仅是简单的在项目 "常规" "属性" 中加入 "公共语言运行库支持(/clr)" 支持就可以得到如此巨大的好处,实在是太划算了!
clq
clr 的程序需要两个包来运行:
1. vs2008 运行库 否则会有 [由于应用程序配置不正确 应用程序未能启动。重新安装应用程序可能会纠正这个问题] 错误。
文件名为 vcredist_x86.exe 安装 vs2008 会有的,在 C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bootstrapper\Packages\vcredist_x86 下。
2. 至少 .net 2.0 安装包.
clq
.net 2.0 有 20m 在 C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bootstrapper\Packages\DotNetFX 下有,如果是 3.5 的话就太大了,要上百 m.
clq
clr 对内存区的检查并不是万能的,我一个用到了 gd 库的服务器改成 clr 并加 try catch(...) 后仍然崩溃,仔细检查后发现是对 new char[len] 的 char * 执行了 gdFree() 造成的。
clq
如何打印错误信息呢?
void tt1()
{
// TODO: 在此添加控件通知处理程序代码
//try{
char * p = new char[1];
//int i = 0;
//i = 10/i;//这个错误在 clr 下能检测出
//tm * m = NULL;
//i = m->tm_hour;//这个错误在 clr 下能检测出
p += 5;//这个错误在 clr 下也没有检测出来//但是当 p 指针访问偏移太多,达到不可访问区时会报异常而不是崩溃
p += 50000;//但是当 p 指针访问偏移太多,达到不可访问区时会报异常而不是崩溃
*p = 'a';
printf("aaa%s", p);
//}catch(...){}//这个可以跳过以上的 clr 异常
}
void Ct3Dlg::OnBnClickedButton1()
{
//tt1();//
// TODO: 在此添加控件通知处理程序代码
try{
tt1();//
return;
char * p = new char[1];
//int i = 0;
//i = 10/i;//这个错误在 clr 下能检测出
//tm * m = NULL;
//i = m->tm_hour;//这个错误在 clr 下能检测出
p += 5;//这个错误在 clr 下也没有检测出来//但是当 p 指针访问偏移太多,达到不可访问区时会报异常而不是崩溃
p += 50000;//但是当 p 指针访问偏移太多,达到不可访问区时会报异常而不是崩溃
*p = 'a';
printf("aaa%s", p);
//}catch(...){}//这个可以跳过以上的 clr 异常
}catch(System::Exception ^ ex)
{
//ex->Source'
printf("%s", ex->StackTrace);
printf("%s", ex->Message);
}//这个可以跳过以上的 clr 异常
}
这样会显示出错的位置,不过如果有函数调用的话,只能显示调用的位置.
另外 vs2008 的 release 版本是默认支持调试信息的。
clq
错误信息类似于:
在 tt1() 位置 d:\test1\t3\t3\t3dlg.cpp:行号 168
在 Ct3Dlg.OnBnClickedButton1(Ct3Dlg* ) 位置 d:\test1\t3\t3\t3dlg.cpp:行号 181
尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
NEWBT官方QQ群1: 276678893
可求档连环画,漫画;询问文本处理大师等软件使用技巧;求档softhub软件下载及使用技巧.
但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
验证问题说明申请入群原因即可.