`
Eastsun
  • 浏览: 308244 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

一种得到代码所在行号的方法

阅读更多

       RT,今天在论坛上看到有人提出这个问题,马上联想到当程序发生异常时,异常信息里面就包含了异常所在行的信息.既然这样,那我为何不再需要得到行号的地方new 一个Exception,然后分析其包含的行号信息呢?

      想法有了,剩下的就简单了,查了下Exception的相关文档,发现Throwable有个getStackTrace()的方法:

getStackTrace

public StackTraceElement
[] getStackTrace
()
Provides programmatic access to the stack trace information printed by printStackTrace() . Returns an array of stack trace elements, each representing one stack frame. The zeroth element of the array (assuming the array's length is non-zero) represents the top of the stack, which is the last method invocation in the sequence. Typically, this is the point at which this throwable was created and thrown. The last element of the array (assuming the array's length is non-zero) represents the bottom of the stack, which is the first method invocation in the sequence.

Some virtual machines may, under some circumstances, omit one or more stack frames from the stack trace. In the extreme case, a virtual machine that has no stack trace information concerning this throwable is permitted to return a zero-length array from this method . Generally speaking, the array returned by this method will contain one element for every frame that would be printed by printStackTrace .

 

Returns:
an array of stack trace elements representing the stack trace pertaining to this throwable.

 

getLineNumber

public int getLineNumber
()
Returns the line number of the source line containing the execution point represented by this stack trace element. Generally, this is derived from the LineNumberTable attribute of the relevant class file (as per The Java Virtual Machine Specification , Section 4.7.8).

 

Returns:
the line number of the source line containing the execution point represented by this stack trace element, or a negative number if this information is unavailable.


最终的代码如下:

java 代码
  1. /**    
  2.  *得到Exception所在代码的行数    
  3.  *如果没有行信息,返回-1    
  4.  */      
  5.   public   static   int  getLineNumber(Exception e){      
  6.      StackTraceElement[] trace =e.getStackTrace();      
  7.       if (trace== null ||trace.length== 0 return  - 1 ;    //      
  8.       return  trace[ 0 ].getLineNumber();      
  9.  }     


使用方法如下:

java 代码
  1. System.out.println( "Current line number :" +getLineNumber( new  Exception()));     

就可以将System.out.println所在行的行号输入.

ps:根据getStackTrace说明文档的红色部分,说明getStackTrace返回内容并没有被硬性规定,因此我这种方法并不能保证在每一个JVM上都有效.但我暂时还不知道有没有其它更好的方法可以实现同样的功能.

而StackTraceElement有个getLineNumber的方法:

分享到:
评论
5 楼 LucasLee 2007-04-03  
直接打出Exception stack就可以了,你单独获得这个行号有什么意义么?
在Eclipse等IDE里,可以直接在控制台中点击抛出异常的某行而直接跳到对应的源码行。

4 楼 xiaoyu 2007-04-03  
不一定准确. 因为trace[0]不一定是你代码抛出来的. 所以你还要检查一下抛异常的源是谁.
3 楼 Eastsun 2007-04-02  
如果我想在程序中使用这个信息呢?
2 楼 dada 2007-04-02  
stackTrace的toString不是有了这个信息了吗?
为啥要自己获取?
1 楼 Eastsun 2007-04-02  
<br/>
<strong>奇怪,为什么直接从剪切板中贴上来的东西会不见呢...</strong>

相关推荐

    vc6.0显示行号的方法

    本文将详细介绍一种在VC6.0中实现显示行号的方法。 #### 显示行号的重要性 在编程过程中,行号的存在对于提高代码的可读性和便于调试有着不可忽视的作用。特别是在学习阶段,行号可以帮助开发者更直观地理解程序...

    获取RichTextBox当前行号

    对于.NET框架下的WPF应用程序来说,`RichTextBox`是一种非常强大的控件,它不仅支持纯文本输入,还能处理复杂的格式化文本,包括字体样式、颜色以及列表等。在某些场景下,可能需要知道光标所在的具体行号,以便进行...

    计算机软件-商业源码-获取RichEdit组件中光标所在的行号.zip

    这个商业源码的标题"计算机软件-商业源码-获取RichEdit组件中光标所在的行号.zip"表明它提供了一种方法来获取在RichEdit组件中的光标所在位置的行号。这对于开发文本编辑器或者处理大量文本数据的应用来说是一个非常...

    为DataGridView自动添加Excel一样的行号

    在.NET框架下的Windows Forms应用程序开发中,`DataGridView`控件是一种非常强大的数据展示工具,它提供了类似于电子表格的功能来显示数据,并且允许用户进行各种操作如排序、筛选等。然而,默认情况下,`...

    Code2HTML将源代码转换为带语法高亮的 HTML

    语法高亮是一种在文本编辑器或代码展示工具中,通过使用不同的颜色和样式来突出显示代码中的不同部分,如关键字、变量、字符串和注释等。这种视觉区分有助于阅读和理解代码,尤其是当代码较长或复杂时。Code2HTML...

    PHP获取指定函数定义在哪个文件中以及其所在的行号实例

    PHP是一种流行的开源服务器端脚本语言,常用于网站开发。在开发过程中,有时需要确定特定函数的定义位置,以便查看其内部实现或进行调试。在有集成开发环境(IDE)如zendstudio的情况下,可以轻易地通过自动提示来...

    pandas全表查询定位某个值所在行列的方法

    接下来,要定位特定值所在的行和列,一种方法是使用`for`循环遍历数据帧。通过遍历数据帧的每一行,并检查每个元素是否是我们要找的值,就可以打印出该值所在的行索引和列索引。这里,我们以`'fox'`为例: ```...

    improvedcode:TinyMCE插件,用于改善HTML编辑器中的用户体验,添加代码突出显示,缩进代码,行号等

    首先,代码高亮是编程和标记语言中常用的一种视觉增强技术,它可以突出显示不同类型的语法元素,使得代码更易读、易理解。"improvedcode"插件支持多种语言的代码高亮,包括但不限于HTML、CSS、JavaScript以及其他...

    NDK或C++开发根据内存地址定位报错代码方法和步骤

    `addr2line`工具是这种情况下的一种关键辅助工具,它能够将内存地址转换为源代码中的行号和文件名,帮助我们快速找到出错的位置。 首先,了解一些基础概念。ABI(Application Binary Interface)是指应用二进制接口...

    FLEX 获取DataGrid行号和列号示例代码

    上述代码提供了两种基本的方法,一种是基于鼠标位置计算行号,另一种是通过事件处理获取列号。这些技术在实现DataGrid的交互功能时非常有用,例如选中、编辑、排序等。在实际开发中,可以根据具体的需求进行调整和...

    EXCEL_VBA常用代码实战大全.doc

    EXCEL VBA 是 Excel 应用程序中的一种编程语言,用于自动化 Excel 操作、实现复杂的数据分析和可视化。下面是 EXCEL VBA 实战大全中的一些常用代码和技巧。 Range 对象 Range 对象是 VBA 中最基本也最重要的对象之...

    babel-plugin-transform-line:将标识符__line替换为源行号

    在源代码中,`__line`通常被视为一个特殊的变量或标记,用于获取当前代码所在的行号。这种魔法变量并不属于标准JavaScript的一部分,而是某些工具或框架为了方便调试和跟踪代码而引入的。`babel-plugin-transform-...

    EXCEL行变各种颜色代码

    这是一种非常实用的方法,可以让你在处理大量数据时快速识别和定位特定行。 #### 二、通过VBA实现行变色 除了使用条件格式外,还可以通过VBA宏编程来实现行变色。VBA提供了一种更为灵活的方式来控制Excel中的各种...

    Python-一个超级简单的Python死代码检测工具

    结果可能以报告的形式显示,列出每个死代码实例及其所在的文件和行号,便于开发者进行清理。 在实际使用过程中,开发者需要注意,虽然这类工具能提供很大帮助,但它们并非完美无缺。有时,代码可能因为特定的条件或...

    JavaScript获取GridView中用户点击控件的行号,列号

    在JavaScript和ASP.NET Web开发中,GridView是一种常用的控件,用于展示数据表格。当GridView的某几列包含按钮等交互元素时,有时我们需要在用户点击这些按钮时获取他们所点击的按钮所在的行号和列号。这有助于我们...

    jQuery实现获取table中鼠标click点击位置行号与列号的方法

    在Web开发中,jQuery是一个广泛使用的JavaScript库,它极大地简化了DOM操作、事件处理、动画制作和Ajax交互。...同时,这也是一种提升jQuery技能的好方法,因为这涉及到DOM操作、事件处理和链式调用等核心概念。

    《C++程序设计》谭浩强 例题程序 习题 的源代码

    对于每一个文件,都建议读者先尝试自己编写代码,然后再对比书中的解决方案,以加深理解和记忆。 总的来说,这个压缩包是C++初学者的宝贵资源,它将理论知识与实践操作紧密结合,有助于全面提升编程能力。无论是对...

    Excel-VBA宏编程实例源代码-获取光标所在位置的坐标.zip

    在Excel中,VBA(Visual Basic for Applications)是一种强大的编程工具,可以用来自动化各种任务,增强Excel的功能。这个“Excel-VBA宏编程实例源代码-获取光标所在位置的坐标.zip”文件提供了一个具体的例子,教你...

    C# 如何获取出错的错误所在行数信息 原创

    当你运行这段代码并触发异常时,`ex.StackTrace`会显示一个包含整个调用堆栈的字符串,其中包括了错误发生的具体方法和行号。不过,显示的信息较为详细,可能包含多个方法的调用路径。 为了仅显示错误发生的行号,...

    C语言编程的词法分析器,可具体定位到每一行查找出错误并生成二元式形式文件

    二元式,或者称作抽象语法树(AST),是一种表示源代码结构的树形数据结构。每个节点代表一个语法构造,子节点代表其组成部分。生成二元式有助于后续的语法分析和代码生成,因为它提供了更高级别的语义信息。 在...

Global site tag (gtag.js) - Google Analytics