New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Missing last element in backtrace #3660

Closed
asfluido opened this Issue May 17, 2017 · 0 comments

Comments

Projects
None yet
1 participant
@asfluido

asfluido commented May 17, 2017

Hello world. If I execute this little test script:

class C
  def runme    
    raise 'a'
  end
end

C::new.runme

I obtain the expected output:

trace:
	[0] /tmp/test1.rb:3:in C.runme
	[1] /tmp/test1.rb:7
/tmp/test1.rb:3:a (RuntimeError)

If my script is, instead, this one:

class C
  def runme    
    a=1*nonexisting
  end
end

C::new.runme

(that is, if I try to make use of a non-existing variable), this is the result:

trace:
	[0] /tmp/test2.rb:7
/tmp/test2.rb:7:undefined method 'nonexisting' for #<C:0x2376170> (NoMethodError)

As you can see, the most recent line of the backtrace is missing. I got it back by commenting the following three lines from backtrace.c (currently at L.275):

  else if (mrb->backtrace.n > 0) {
    print_backtrace_saved(mrb);
  }

I now receive:

trace:
	[1] /tmp/test2.rb:3:in C.runme
	[0] /tmp/test2.rb:7
/tmp/test2.rb:7:undefined method 'nonexisting' for #<C:0x1438170> (NoMethodError)

but this is most probably not the proper fix: I have recovered the missing backtrace element, but the error message still points to the wrong script line (7 instead of 3).

Ideas?

@matz matz closed this in 9bca887 May 25, 2017

matz added a commit that referenced this issue May 25, 2017

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment