【发布时间】:2011-12-01 08:39:17
【问题描述】:
我想获取导致错误的代码行号。例如;
static void Main(string[] args)
{
using (SqlConnection conn = new SqlConnection(bagcum))
{
SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = "DONTINSERT into GIVEMEERROR(CamNo,Statu) values (" + 23 + "," + 0 + ")";
conn.Open();
int n = cmd.ExecuteNonQuery();
}
}
所以我们知道代码不起作用,它会抛出异常代码行号是:
int n = cmd.ExecuteNonQuery();
那么如何获得使用try-catch 的行号呢?我尝试使用 StackTrace 类,但它给出的行号为 0:
static void Main(string[] args)
{
try
{
using (SqlConnection conn = new SqlConnection(bagcum))
{
SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = "DONTINSERT into GIVEMEERROR(CamNo,Statu) values (" + 23 + "," + 0 + ")";
conn.Open();
int n = cmd.ExecuteNonQuery();
}
}
catch (Exception ex)
{
System.Diagnostics.StackTrace trace = new System.Diagnostics.StackTrace(ex, true);
Console.WriteLine("Line: " + trace.GetFrame(0).GetFileLineNumber());
}
}
输出:
Line:0
更新:
通常错误代码行是 22,所以我必须得到那个数字。
谢谢
【问题讨论】:
-
如果您处于
RELEASE模式,则堆栈跟踪中不再存在行号(以及其他行号)。在DEBUG模式下编译的最简单方法。如果仍然无法正常工作,请检查 project properties\Advanced\Debug Info 中是否有完整的 Debug 信息。 -
@JiBéDoublevé 处于调试模式,完全调试
-
您的 .pdb 文件是否与所有其他文件位于同一目录中?