关于throw的问题

离子漂浮物 2008-11-29 05:29:29
案例代码如下:

public string getData(int index)
{
if (index > 10 || index < 0) { throw new ArgumentOutOfRangeException("index"); }
return dList[index];
}


this.getData(1);
this.getData(3);
this.getData(100);//出错行
this.getData(6);



当运行到this.getData(100);就会提示"指定的参数已超出有效值的范围。",但是在debug会把出错行定位在throw行,而不是this.getData(100);所在的位置。这样在作调试时非常麻烦,有没什么办法让这个源码定位this.getData(100);位置呢?
...全文
189 点赞 收藏 30
写回复
30 条回复
离子漂浮物 2008年12月03日
基本上知道怎么回事了,用[System.Diagnostics.DebuggerHidden()]的情况下,使用F5调试方式,可以达到我想要的效果,但是如果直接通过虚拟主机访问ASP.net的源码来调试的话,[System.Diagnostics.DebuggerHidden()]是不起作用的。
如果发生我throw的错误,只好用F5来调试才能找到真正出错的语句了。
感谢以上各位的回答。

如果有知道直接用虚拟主机访问源码也能达到这种效果的话,可以发短信给我告知答案,我再另开帖子给分,谢谢。
回复 点赞
wartim 2008年12月03日
这样就会定位到this.getData(100)了

namespace WindowsApplication20
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.getData(1);
this.getData(3);
this.getData(100);//出错行
this.getData(6);
}
[System.Diagnostics.DebuggerHidden()]
public string getData(int index)
{
if (index > 10 || index < 0) { throw new ArgumentOutOfRangeException("index"); }
return "";
}
}
}
回复 点赞
liningln0 2008年12月03日
[Quote=引用 22 楼 flyjimi 的回复:]
引用楼主 oyiboy 的帖子:
案例代码如下:

C# code
public string getData(int index)
{
if (index > 10 || index < 0) { throw new ArgumentOutOfRangeException("index"); }
return dList[index];
}


当运行到this.getData(100);就会提示"指定的参数已超出有效值的范围。",但是在debug会把出错行定位在throw行,而不是this.getData(100);所在的位置。这样在作调试时非常麻烦,…
[/Quote]

正确,先仔细分析错误位置.
回复 点赞
xupeihuagudulei 2008年12月03日
up
回复 点赞
sikezx 2008年12月03日
有必要这样么?自己通过问题寻找问题出处,在编译器的基础上,嘿嘿!能够更好的思考啊!
回复 点赞
离子漂浮物 2008年12月03日
[Quote=引用 26 楼 wartim 的回复:]
这样就会定位到this.getData(100)了

C# code
namespace WindowsApplication20
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.getData(1);
this.getData(3);
this.getData(100);//出错行
this.getData(6);
}
[System.Diagnostics.DebuggerHidden()]
pub…
[/Quote]

奇怪就在这里,我把System.Diagnostics里所有关于debug的东西都试了一遍了。都不能达到这个效果,是不是因为webfrom的关系?
回复 点赞
huangkui800 2008年12月03日
顶中
回复 点赞
wangping_li 2008年12月02日
使用try...catch
回复 点赞
wsp4872816brave 2008年12月02日
发现这个问题的时候


要保持清醒的头脑



寻找破绽 首先很明显出现了异常


那么 我们处理异常的方法有哪些那?

try
{};

catch(Exception ex)
{};

这些是大家常用的 !


而且 你的初始值 范围也是规定好的了!


希望你试试!

回复 点赞
flyjimi 2008年12月02日
[Quote=引用楼主 oyiboy 的帖子:]
案例代码如下:

C# code
public string getData(int index)
{
if (index > 10 || index < 0) { throw new ArgumentOutOfRangeException("index"); }
return dList[index];
}


当运行到this.getData(100);就会提示"指定的参数已超出有效值的范围。",但是在debug会把出错行定位在throw行,而不是this.getData(100);所在的位置。这样在作调试时非常麻烦,有没什么办法让这个源码定位this.getData(100);位置呢?

[/Quote]

想让ide定位到 if (index > 10 || index < 0)这里是不可能的。
因为程序运行到这个if并没有出错,是你人为抛出的异常。
你可以自定义一个异常,实例化的时候,记录下导致异常抛出的代码行信息。
回复 点赞
leo_bogard 2008年12月02日
up
回复 点赞
cuike519 2008年12月01日
可以通过CallStack看到调用栈。

你的代码抛出异常并且VS捕获了这个未处理的异常,就是当前throw的这个地方,为什么会是你说的那个出错行呢?

==》this.getData(100);//出错行
上面这行代码有什么错?我看不出来。。。这行代码本身没有错,错误在throw那里。

你这些代码应该是一个Unit Test的函数吧,如果是UnitTest你可以在方法上面添加一个标记,表示期望该异常出现,不同的Unit Test这个标记的名字有些差异,自己找找吧。
回复 点赞
bbbbbb888888 2008年12月01日
try

catch
回复 点赞
huoxudong125 2008年12月01日
那就的找源文件了
回复 点赞
离子漂浮物 2008年12月01日
[Quote=引用 17 楼 eglic 的回复:]
汗,我的需求正好跟LZ相反…………

在一个DLL里面抛出的错误,我必须一次次的右键->转到定义才能跟踪到出错的地方……

LZ你编译成DLL再引用试试,看还会跳到代码里面不
[/Quote]

嗯,我的代码就是在DLL里的,能说说你作DLL时加了设置了吗?
回复 点赞
是是非非 2008年12月01日
汗,我的需求正好跟LZ相反…………

在一个DLL里面抛出的错误,我必须一次次的右键->转到定义才能跟踪到出错的地方……

LZ你编译成DLL再引用试试,看还会跳到代码里面不
回复 点赞
离子漂浮物 2008年12月01日
[Quote=引用 15 楼 cuike519 的回复:]
可以通过CallStack看到调用栈。

你的代码抛出异常并且VS捕获了这个未处理的异常,就是当前throw的这个地方,为什么会是你说的那个出错行呢?

==》this.getData(100);//出错行
上面这行代码有什么错?我看不出来。。。这行代码本身没有错,错误在throw那里。

你这些代码应该是一个Unit Test的函数吧,如果是UnitTest你可以在方法上面添加一个标记,表示期望该异常出现,不同的Unit Test这个标记的名字有些差异,自己…
[/Quote]


嗯,我作的是一个DLL,在用户错误使用DLL的方法时用throw方式把错误提示出来。但又不能暴露DLL的源码,应该怎么作呢?
回复 点赞
duping9626 2008年11月30日
在错误提示对话框图中
点下面的"查看详细信息"-->再出一个对话框-->展开节点-->StackTrace行,里会有描术具体的调用出错函数及行号
也就是用try捕捉的Exception.StackTrace信息
回复 点赞
lchh0917 2008年11月29日
学习~
回复 点赞
止戈而立 2008年11月29日
为何在调用这个方法时不加try{} catch{}呢?

try
{
this.getData(100);
}


要不你就别抛异常:

    public string getData(int index)
{
if (index > 10 || index < 0)
{ MessageBox.Show("Index的值不在指定的范围内");
 return null;
}
return dList[index];
}
回复 点赞
发动态
发帖子
C#
创建于2007-09-28

8.4w+

社区成员

64.0w+

社区内容

.NET技术 C#
社区公告
暂无公告