一个关于错误提示的问题,真正的高手请进
我们在运行的时候如果程序有错,系统会报出黄页错误,其他信息都可以通过exception对象获取,但源错误却得不到,请问怎么样才能获取到如下面的:
“/ErrTest”应用程序中的服务器错误。
--------------------------------------------------------------------------------
试图除以零。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.DivideByZeroException: 试图除以零。
源错误:
行 59: string strss = null;
行 60: int i = Convert.ToInt32(strss);
行 61: int j = 1/i;
行 62:
行 63:
就是代码的信息
问题点数:100、回复次数:25Top
1 楼SVG(ben)回复于 2004-12-02 08:50:11 得分 0
确保i不是0Top
2 楼SVG(ben)回复于 2004-12-02 08:52:03 得分 0
如果你只是想捕捉是什么样的exception , 可以catch 下 System.DivideByZeroException的:
catch(System.DivideByZeroException ex)
{
//deal the ex's message here
}Top
3 楼xrascal(横刀夺爱)回复于 2004-12-02 08:55:14 得分 0
string strss = null;
int i = Convert.ToInt32(strss);
这样转换过来后
i 的值 = 0
学过数学的都知道。 0 不能作为除数Top
4 楼chenhaoying(风雨无阻)回复于 2004-12-02 08:55:40 得分 0
楼上的正解,用try_catch。Top
5 楼forideal(我心飞翔)回复于 2004-12-02 08:57:51 得分 0
在int i = Convert.ToInt32(strss);后面直接用if来判断不也可以吗?!!Top
6 楼chnj1981(怡红公子)回复于 2004-12-02 08:59:15 得分 0
strss = null------------这里付了空值
int i = Convert.ToInt32(strss);--------------这里得到的i也是空值。
是否忘了给strss 付值?Top
7 楼vzxq(灵感人)回复于 2004-12-02 08:59:19 得分 0
try catchTop
8 楼jeffidea(程序诗人)回复于 2004-12-02 09:03:37 得分 0
解决这种问题就是真正的高手吗?鄙视楼主一下,同时对楼主标题提出强烈的抗议:
“一个关于错误提示的问题,真正的高手请进 ”
在CSDN上不就是互相学习么?不要搞歧视嘛!
呵呵,希望楼主不要生气,战友嘛!Top
9 楼conquersky(conquersky V)回复于 2004-12-02 09:06:17 得分 0
用try_catch
默认的转换后是0 不能当底Top
10 楼shoutor(www.mouxiao.com)回复于 2004-12-02 09:06:56 得分 0
0不能作为被除数,使用try catch捕获异常Top
11 楼pxg76()回复于 2004-12-02 09:07:16 得分 0
那是我故意写错的,我现在在写一个错误处理程序,现在写到日志里的只有堆栈里的跟踪信息,我想将黄页里的错误源下的代码也写到日志里.兄弟们可能理解错了Top
12 楼wangxiaohu(如花)回复于 2004-12-02 09:15:59 得分 0
在catch里面输出Exception.StackTrace还不够用吗?Top
13 楼SVG(ben)回复于 2004-12-02 09:20:33 得分 0
那就
try
{
string strss = null;
int i = Convert.ToInt32(strss);
int j = 1/i;
}
catch(Exception ex)
{
MessageBox.Show(ex.ToString() + ex.StackTrace);
}Top
14 楼SVG(ben)回复于 2004-12-02 09:25:22 得分 0
搞错了一点, 不好意思.
ex.ToString() 已经包括ex.Message 和ex.StackTrace
如果想捕捉到是哪行代码出错的. 则要保留编译调试文件: *.pdbTop
15 楼pxg76()回复于 2004-12-02 09:34:19 得分 0
Exception.StackTrace里的信息不够,上面的兄弟可能没理解我的意思,在一个程序里尼是不可能全部知道错误发生在哪里,所以别说try catch了那些我都知道,当程序发布出去之后,只根据Exception.StackTrace的信息是不够的,没办法确定错误的代码Top
16 楼SVG(ben)回复于 2004-12-02 09:38:10 得分 50
没办法确定错误的代码
//==>
如果想捕捉到是哪行代码出错的. 则要保留编译调试文件: *.pdb
捕捉的Exception.ToString() 才包括错误代码位置信息的.Top
17 楼pxg76()回复于 2004-12-02 09:38:32 得分 0
to jeffidea 这个问题不是高手还真不会知道,你连我说什么都没明白,我想你的水平也只是just so so了,这里是技术论坛不是学习论坛,学习是必要的,但简单的问题还是自己解决的好Top
18 楼warfen(学无止境)回复于 2004-12-02 09:40:09 得分 0
"string strss = null;",这句声明为空,那么在转换成INT的时候默认的好象就是零。Top
19 楼pxg76()回复于 2004-12-02 09:41:25 得分 0
谢谢SVD(BEN)我现在跟踪server对象的时候只找到了源错误三个字,但微软的黄页是怎么将错误代码弄出来的呢?Top
20 楼warfen(学无止境)回复于 2004-12-02 09:44:14 得分 0
零不能做除数。
还有
string strss = null;
int i = Convert.ToInt32(strss);
int j = 1/i;
这三句话写的也有点问题,如果string stress=null;的下一条语句没有改变stress的值,那么stress就永远为null,还不是如直接写个int i=0;
Top
21 楼pxg76()回复于 2004-12-02 09:54:46 得分 0
warfen兄弟别说了,谢谢你,但你说的和我想问的不是一会事SVD(BEN)说的才对Top
22 楼leisang(仰望深邃的星空)回复于 2004-12-02 10:04:33 得分 0
这个还是要从底层着手....Top
23 楼lhs1727(李焕圣)回复于 2004-12-02 10:10:57 得分 0
用 try_catchTop
24 楼lwlxg()回复于 2004-12-02 10:11:54 得分 50
若要得到出错源码必须得到pdb文件,从pdb文件中找到错误代码的位置。若没有,建议换一种思路。等等Top
25 楼SVG(ben)回复于 2004-12-02 10:18:36 得分 0
虽然没了解你说的"软的黄页是怎么将错误代码"
但以对微软作风的了解.
应该是他们对异常作了点处理的, 比如自定义异常等, 并不是简单的try catch system.exception的.
建议你看看微软的application block的exception management application block
可能有你想要的东西
我还未看这个block, 只是了解过.
研究总结后欢迎交流交流
Top




