C#:异常处理 - 查找错误
问题描述:
我有这样的代码:C#:异常处理 - 查找错误
private void btnNext_Click(object sender, RoutedEventArgs e){
try
{
// Lots of codes in here
}
catch (Exception ex)
{
System.Windows.MessageBox.Show(ex.Message + Environment.NewLine + ex.StackTrace.ToString())
}
finally
{}
}
它捕获异常,但没有告诉我哪里有异常的代码里面出现。我唯一得到的是这个。
Object reference not set to an instance of an object
at ProjectPath.btnNext_Click(Object sender, RoutedEventArgs e)
发布代码在很多机器上都能正常工作,但是在很少的机器上,它会抛出这个异常。我只是不知道在这些机器上运行时发生异常的代码的位置。有没有办法找到发生异常的确切行? ex.StackTrace
没有完成工作。
任何帮助将不胜感激。
答
要找到确切的位置 - 源代码中的特定行 - 它有助于在调试器中运行代码并在异常处理程序中设置断点。
如果您检查作为异常处理程序参数引用的数据结构(示例中为ex
),则会找到名为StackTrace
的数据成员。如果位置在任何地方,它将在这里。在这里,例如,我正在处理异常的字符串的方式如下:
at DOffice.BrMan.getLastReportRefreshed() in E:\\src\\BrMan.cs:line 5370
at DOffice.BrParms.lookupParmByParmName(String parmName) in E:\\src\\BrParms.cs:line 169
at DOffice.BrMan.populateAllFromTextFile(String workDirectory) in E:\\src\\BrMan.cs:line 3218
at DOffice.BrMan.setWorkPath(String pathOfCurrentDoc) in E:\\src\\BrMan.cs:line 1686
at DOffice.Form_Dash.InitWork(Object sender) in E:\\src\\Form_Dash.cs:line 1261
不要捕获它并在调试器中运行它。它将停止抛出异常的位置。 (或者更好,告诉你的调试器停止捕获和未捕获的异常) –
你可以在调试器下运行它吗?如果可以的话,只需打开让调试器中断引发异常的选项即可。 (菜单:调试|例外 - >打开“引发”为'公共语言运行时例外') –
以较小的原子块重构代码 – Dhawalk