首先,在我被大吼之前,我想要明确一些事情:我没有计划编写任何能够使用这种控制流程的代码; 它显然很可怕.忘记一个用例,这是一个关于它是否可能的问题:
我想知道是否有可能知道调用堆栈的某个位置,是否在catch块中为特定异常调用了一个函数.
假设我有一个功能:
foo() {
try {
something
}
catch (SuperException s) {
bar()
}
Run Code Online (Sandbox Code Playgroud)
因此,如果没有对bar的方法签名的控制,并且给定的bar也被许多其他函数调用,那么如果在catch块中调用超级函数,那么bar的行为会不同吗?(并且不,被foo调用不是一个充分条件,它是重要的超级例外)
您可以查看调用堆栈并获取每个调用的行号.
您可以读取字节代码以确定catch块的位置以及这些块中的代码行.
将两者匹配在一起以查看调用堆栈中的任何位置是否在catch块中.
注意:只有在代码中编译了调试信息时,这才有效.
| 归档时间: |
|
| 查看次数: |
123 次 |
| 最近记录: |