代码如下:                        System.Windows.Forms.DialogResult result;
                        try
{
result = frm.ShowDialog(this);
}
catch (Exception ex)
{
string x = ex.message
}如果frm中发生错误,Debug版可以捕捉到错误。但是Release版却会发生系统级错误,也就是非法操作。为什么?是否是因为Release版本编译时进行了代码优化?有没有解决的方法呢?
谢谢大家了!

解决方案 »

  1.   

    大哥,Release 模式跟不进代码的,没有解决办法的.
    建议,调试用deBug 模式,无错后,生成程序用Release 模式。
      

  2.   

    Release进行了代码优化,
    一般通过Debug等来消除错误,通过调试后,再Release
      

  3.   

    许多运行时错误是不可能消除的啊,比如网络错误。我用错误捕获try-catch的目的不就是要自定义处理这些错误吗,debug可以捕获到,release却捕获不到。那么我该如何自定义的去处理这些错误呢?
      

  4.   

    try{}内部的潜在错误级别不能过深……
      

  5.   

    把我的问题换一种方法描述吧,可能让人误会了。为什么try-catch在Debug模式下有效在Release模式下无效?
      

  6.   

    debug里有调试信息,release没有,也就是说release下编译的程序不能设断点调试,release下生成的文件要比debug下生成的文件小release版本是比较安全的版本release 和 debug 的不同点:
    1、release 没有 debug information & symbols,比如每段code对应的源文件名和行号。
    2、release 不包含 MFC 的诊断代码,如 Assert, Dump 以及相关的宏都不会被编译。
    3、relesse 被大幅度优化,(debug 生成的二进制代码严格的符合源代码),比如:
    for(int i = 0; i < 16; i++)
    string[i] = '\0';
    编译成:
    __asm {
    xor eax,eax
    mov dword ptr [string],eax
    mov dword ptr [string+4],eax
    mov dword ptr [string+8],eax
    mov dword ptr [string+12],eax
    }
      

  7.   

    另外可以去这里看看他们的区别
    http://www.7622.com/list/44469.htm
      

  8.   

    如果是被优化掉了,如何才能使得 try-catch 不在编译时被优化掉呢。各位请看清楚我的问题。 try-catch在一般的情况下,debug和release版本是没有区别的。 
    但是在上面的代码中,两种版本的表现却完全不同。try-catch在release版本中完全无效了!