【发布时间】:2013-11-16 22:26:47
【问题描述】:
我正在执行一个名为 MethodA 的方法,在该方法中,我想获取 MethodA 的行号。我可以通过
得到这个号码var lineNumber = stacktrace.GetFrame(i).GetFileLineNumber()
但是,这仅获取将在 MethodA 之后执行的下一行的行号。当我在 MethodA 和下一行代码之间有很大的空间时,这是有问题的。
有没有办法在stacktrace中获取当前行的上一行?
编辑: MethodA 在第 100 行的另一个文件中被 this 调用
MethodA();
我想找到第 100 行
编辑:
这个错误在发布模式下出现,但在调试模式下没问题
编辑:
所以我发现当取消选中构建选项中的优化代码时,我得到了正确的行号。但是,这仅在我在发布模式下调试时才有效;当我刚刚在发布模式下运行时,我得到了错误的行号。
【问题讨论】:
-
你想完成什么?
-
我猜没有办法,但我不确定。
-
当您说“MethodA”时,您是指调用 MethodA 的位置、MethodA 方法实现的开始,还是 MethodA 实现中的某个特定行?从你的问题看不清楚。一个简单的代码示例会有所帮助。
-
这是方法调用工作方式不可避免的副作用。堆栈上的地址是 return 地址,调用完成后代码应该在该地址恢复。这是 CALL 之后的机器代码指令。如果该地址是源代码中下一条语句生成的代码的开头,则报告的行号将减一。没有简单的解决方法。
标签: c# stack-trace