代码之家  ›  专栏  ›  技术社区  ›  dariom

堆栈跟踪中方法名称末尾的“+n”值是什么意思?

  •  18
  • dariom  · 技术社区  · 17 年前

    读取堆栈跟踪时,如:

    [FormatException: Input string was not in a correct format.]
       System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal) +2755599
       System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info) +112
       System.Convert.ToInt32(String value) +68
    

    +68、+112等数字是什么意思。我猜它们是对某些东西的补偿。如果是,什么?

    3 回复  |  直到 11 年前
        1
  •  15
  •   Jon Skeet    17 年前

    我相信它们是方法代码中的偏移量-无论是IL还是JIT编译的汇编字节,我不确定。。。

        2
  •  4
  •   CodingYoshi    9 年前

    这意味着:

    它是该方法的本机指令的偏移量。

    阅读 this 更多细节。

        3
  •  2
  •   MysticSlayer    17 年前

    它是转换为本机代码的字节偏移量。

    和ILDASM在一起你知道为什么。

        4
  •  0
  •   Habeeb    6 年前

    简单地说,堆栈跟踪是流中函数/方法的逆时间顺序列表,直到当前代码。也就是说,直到遇到断点或发生异常为止。

    在堆栈跟踪列表的顶部是当前方法及其详细信息,如类、程序集、文件名等。

    堆栈跟踪中的所有这些细节都是有益的,因为它列出了方法调用的起源以及到达当前代码行之前的中间方法/函数。这非常有用,因为如果有多种方法访问当前方法,Stack Track会列出所遵循的确切流程。