Ruby-CSV截断回溯

Ruby-CSV截断回溯,ruby,Ruby,给定以下代码: test.rb 两个克斯顿。 首先,为什么回溯被截断,并且不显示meth1或meth2调用: No such file or directory @ rb_sysopen - ruby test.rb /Users/x/.rbenv/versions/2.7.2/lib/ruby/2.7.0/csv.rb:641:in `initialize' /Users/x/.rbenv/versions/2.7.2/lib/ruby/2.7.0/csv.rb:641:in `open' /

给定以下代码:

test.rb 两个克斯顿。 首先,为什么回溯被截断,并且不显示meth1或meth2调用:

No such file or directory @ rb_sysopen -
ruby test.rb
/Users/x/.rbenv/versions/2.7.2/lib/ruby/2.7.0/csv.rb:641:in `initialize'
/Users/x/.rbenv/versions/2.7.2/lib/ruby/2.7.0/csv.rb:641:in `open'
/Users/x/.rbenv/versions/2.7.2/lib/ruby/2.7.0/csv.rb:641:in `open'
/Users/x/.rbenv/versions/2.7.2/lib/ruby/2.7.0/csv.rb:510:in `foreach'
test.rb:in `each'
其次,(截断的)回溯指向CSV的第641行(使用RubyV2.7.2)。但是,第641行没有initialize()方法。这是从哪里来的

.rbenv/versions/2.7.2/lib/ruby/2.7.0/csv.rb 如果我尝试直接(而不是通过CSV)调用另一个测试文件.open(“”),则生成的回溯将按预期显示所有内容(包括对meth1和meth2的调用)


任何红宝石大师都知道发生了什么事吗?

我不确定自己是否理解
#foreach:510
调用
打开
打开:641
调用
文件。打开

无论如何,Ruby回溯总是有点不稳定,特别是对于本地顶级文件

看到
initialize
的原因是
foreach
是CSV的一个类方法,因此有一些幕后的Ruby把戏

您可以使用私有方法
调用方位置
,但是:

put e.send(:调用者位置)
哪些产出:

test.rb:7:in `meth2'
test.rb:4:in `meth1'
test.rb:20:in `<main>'
test.rb:21:in `backtrace'
test.rb:21:in `rescue in meth2'
test.rb:7:in `meth2'
test.rb:4:in `meth1'
test.rb:35:in `<main>'
以及其他噪音

如果你真的想大发雷霆,在
拯救计划中:

put-Thread.current.backtrace

哪些产出:

test.rb:7:in `meth2'
test.rb:4:in `meth1'
test.rb:20:in `<main>'
test.rb:21:in `backtrace'
test.rb:21:in `rescue in meth2'
test.rb:7:in `meth2'
test.rb:4:in `meth1'
test.rb:35:in `<main>'
test.rb:21:in'backtrace'
测试rb:21:在“meth2中的救援”中
测试rb:7:in'meth2'
测试rb:4:in'meth1'
测试rb:35:in`'

我不太明白
#foreach:510
调用
打开
打开:641
调用
文件。打开

无论如何,Ruby回溯总是有点不稳定,特别是对于本地顶级文件

看到
initialize
的原因是
foreach
是CSV的一个类方法,因此有一些幕后的Ruby把戏

您可以使用私有方法
调用方位置
,但是:

put e.send(:调用者位置)
哪些产出:

test.rb:7:in `meth2'
test.rb:4:in `meth1'
test.rb:20:in `<main>'
test.rb:21:in `backtrace'
test.rb:21:in `rescue in meth2'
test.rb:7:in `meth2'
test.rb:4:in `meth1'
test.rb:35:in `<main>'
以及其他噪音

如果你真的想大发雷霆,在
拯救计划中:

put-Thread.current.backtrace

哪些产出:

test.rb:7:in `meth2'
test.rb:4:in `meth1'
test.rb:20:in `<main>'
test.rb:21:in `backtrace'
test.rb:21:in `rescue in meth2'
test.rb:7:in `meth2'
test.rb:4:in `meth1'
test.rb:35:in `<main>'
test.rb:21:in'backtrace'
测试rb:21:在“meth2中的救援”中
测试rb:7:in'meth2'
测试rb:4:in'meth1'
测试rb:35:in`'

谢谢!我真的很想弄清楚Ruby的神奇之处是什么,以及为什么回溯会被CSV截断。在失败的方法加上截断的CSV输出之前,使用调用者或从上下文中缝合backtrace()是可能的,但有问题。在通过调用堆栈(Rails)中数百层的应用程序测试中,测试框架只会弹出
exception.backtrace
。如果回溯本身被截断,我必须进入杂草中手动查找。@jpgeek一般来说,对于非CLI应用程序,您不会有这个问题(还有更好的错误,尽管我不知道是否保持了这个错误)。在Rails应用程序中完全不知所措是很少见的(除了标准的Rails混乱)。我在Rails中遇到了这个问题。RSpec/MiniTest目前只显示上面的四行跟踪——对于查找我的代码出错的地方来说非常无用。如果有完整的追踪就好了,但看起来这不会很快发生。再次感谢,谢谢!我真的很想弄清楚Ruby的神奇之处是什么,以及为什么回溯会被CSV截断。在失败的方法加上截断的CSV输出之前,使用调用者或从上下文中缝合backtrace()是可能的,但有问题。在通过调用堆栈(Rails)中数百层的应用程序测试中,测试框架只会弹出
exception.backtrace
。如果回溯本身被截断,我必须进入杂草中手动查找。@jpgeek一般来说,对于非CLI应用程序,您不会有这个问题(还有更好的错误,尽管我不知道是否保持了这个错误)。在Rails应用程序中完全不知所措是很少见的(除了标准的Rails混乱)。我在Rails中遇到了这个问题。RSpec/MiniTest目前只显示上面的四行跟踪——对于查找我的代码出错的地方来说非常无用。如果有完整的追踪就好了,但看起来这不会很快发生。再次感谢。