[cfe-dev] How to break in debugger when -fsanitize=undefined prints something?

Alexander Shaduri ashaduri at gmail.com
Thu May 30 12:15:23 PDT 2013


Hello,

On Tue, 28 May 2013 13:05:41 -0700
Richard Smith wrote:

> > Here's one of the warnings I get, but cannot debug because
> > I cannot find the actual location:
> > liblocal_qwt.so:0x4732fe: runtime error: load of value 4294967199,
> > which is not a valid value for type 'Qt::AlignmentFlag'
> 
> For this error, you can break on __ubsan_handle_type_mismatch.

For this particular warning I found that the correct function is
__ubsan_handle_load_invalid_value.


> We don't have documentation explaining how the checks map to handler
> functions yet. To find the handler name in general, you can build a
> program which exhibits the diagnostic with -fno-sanitize-recover, break
> on calls to '__sanitizer::Die()', and find the __ubsan_handle_*
> function in the backtrace.

Yes, the lack of documentation (including on the switch you mention)
is unfortunate. I found that an easier way to do this is to search the
warning text in "projects/compiler-rt/lib/ubsan/ubsan_handlers.cc" and
just break on the function name it's mentioned in.

> I would also like to include a backtrace with the ubsan warnings, but
> that is not implemented yet. Patches very much welcome! (The backtrace
> functionality from the other sanitizers could almost certainly be reused
> here.)

Yes, a backtrace would be great! Not sure I'm able to provide any
patches at this point though.

Thanks a lot for your help,
Alexander



More information about the cfe-dev mailing list