Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 从回溯中切断来自特定库的步骤_Ruby_Backtrace - Fatal编程技术网

Ruby 从回溯中切断来自特定库的步骤

Ruby 从回溯中切断来自特定库的步骤,ruby,backtrace,Ruby,Backtrace,有时,我们使用的库调试得非常好,通常不会导致错误。尽管如此,这些库仍可能由于我们误用它们的API而返回错误。在这种情况下,这些库的内部步骤显示在错误的回溯中,从使用库的程序员的角度来看,这些回溯只是垃圾,很难找出错误的原因。甚至核心Ruby中的一些方法也会在回溯中插入一些内部步骤。例如,每当您看到涉及Enumerable#inject的回溯时,总是会从中调用Enumerable#每个,这会显示在回溯中,令人讨厌 从回溯中删除某些给定库的内部步骤的好方法是什么?我目前正在通过解析回溯并按文件名过滤

有时,我们使用的库调试得非常好,通常不会导致错误。尽管如此,这些库仍可能由于我们误用它们的API而返回错误。在这种情况下,这些库的内部步骤显示在错误的回溯中,从使用库的程序员的角度来看,这些回溯只是垃圾,很难找出错误的原因。甚至核心Ruby中的一些方法也会在回溯中插入一些内部步骤。例如,每当您看到涉及
Enumerable#inject
的回溯时,总是会从中调用
Enumerable#每个
,这会显示在回溯中,令人讨厌

  • 从回溯中删除某些给定库的内部步骤的好方法是什么?我目前正在通过解析回溯并按文件名过滤它来实现它。有更好的方法吗

  • 当您自己编写一个库时,有没有一种好方法可以抑制包含使用库的方法调用的回溯中出现的内部步骤?一个明显的方法可能是为从库外部使用的每个方法插入一对
    rescue
    raise
    ,但这似乎并不正确

  • 没有比这更好的过滤方法了。但是,如果可以获得回溯的完整文件路径,则可以按目录进行筛选,这样可以排除所有stdlib和gem。除此之外,这是更多的麻烦比它的价值
  • 有一个更好的解决方案。然而,它要求您在库中捕获Ruby抛出的所有异常,然后在执行此操作后重新引用它们(也对您自己的所有异常执行此操作)。因此,请用以下内容包装您的所有方法:

    begin
      ...
    rescue Exception
      e = $!  
      e.set_backtrace(caller(nesting_level))
      raise e
    end
    
    嵌套级别是调用当前方法的库的多少个方法。如果它是直接从用户代码调用的,则放入0。如果它是由在用户代码中调用的一个方法调用的,则放入1,依此类推


  • Enumerable#reject
    FTW:)看起来aspects(我更喜欢ruby)就是您所需要的。见e。G(向下滚动两个屏幕。)我无法准确地在2中得到你的建议。你能详细说明一下吗?