Eig*_*ite 9 .net debugging stack-trace line-numbers
好的; 假设此代码在调试模式下运行 -
static StackFrame GetTopFrameWithLineNumber(Exception e)
{
StackTrace trace = new StackTrace(e);
foreach (StackFrame frame in trace.GetFrames())
{
if (frame.GetFileLineNumber() != 0)
{
return frame;
}
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
我总是返回null.为什么我检查Exception.StackTrace字符串时堆栈帧没有行号,它显然有任何非框架代码?从我不知道的异常构造堆栈跟踪是否存在问题?
编辑CLARITY: 在抛出的异常中,我可以看到StackTrace属性中的行号.我假设这意味着我拥有我需要的一切.
Bri*_*sen 17
根据有关异常的StackTrace构造函数重载的文档,您不能指望以这种方式创建StackTrace时的行号.
StackTrace是使用调用者的当前线程创建的,不包含文件名,行号或列信息.
要获取行号,您需要使用带有bool的异常以及异常.
您还需要符号文件(pdb)作为行号.符号文件可用于两个调试和发布版本.