关于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);位置呢?
...全文
259 30 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
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];
}
加载更多回复(10)

111,096

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧