Hi,
I am running a robotic application on Ubuntu16. The application is compiled with Clang’s UndefinedBehavior sanitizer with an “-g” option. I got a brief error message which seemed to indicate a bug somewhere:
/usr/include/x86_64-linux-gnu/qt5/QtCore/qglobal.h:517:55:
runtime error: -nan is outside the range of representable values of type ‘int’
My guess is that the bug is from my application, not from the more mature QT. How could I determine which line in the source (which I can access) of the application that triggers this runtime error?
Thanks.
Zhoulai
export UBSAN_OPTIONS="print_stacktrace=1"
might help
Thank you! The “print_stracktrace” trick does help. I get something that is shown below, which traces the error back to the binary code of the buggy application (which is in C++). A naive question: With Clang, is it possible to get the offending line of the source code, like when you print a stracktrace of an exception in Java?
/usr/include/x86_64-linux-gnu/qt5/QtCore/qglobal.h:517:55: runtime error: -nan is outside the range of representable values of type ‘int’
#0 0x4b0ffb (/home/zhfu/catkin_ws/devel/lib/turtlesim/turtlesim_node+0x4b0ffb)
#1 0x4ab7b3 (/home/zhfu/catkin_ws/devel/lib/turtlesim/turtlesim_node+0x4ab7b3)
#2 0x4a501f (/home/zhfu/catkin_ws/devel/lib/turtlesim/turtlesim_node+0x4a501f)
#3 0x50a6af (/home/zhfu/catkin_ws/devel/lib/turtlesim/turtlesim_node+0x50a6af)
#4 0x509d3a (/home/zhfu/catkin_ws/devel/lib/turtlesim/turtlesim_node+0x509d3a)
#5 0x543be3 (/home/zhfu/catkin_ws/devel/lib/turtlesim/turtlesim_node+0x543be3)
#6 0x7fd2719a5d29 (/usr/lib/x86_64-linux-gnu/libQt5Core.so.5+0x2b4d29)
#7 0x7fd2719b25c7 (/usr/lib/x86_64-linux-gnu/libQt5Core.so.5+0x2c15c7)
#8 0x7fd2719a6bb2 (/usr/lib/x86_64-linux-gnu/libQt5Core.so.5+0x2b5bb2)
#9 0x7fd275c9505b (/usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5+0x15b05b)
#10 0x7fd275c9a515 (/usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5+0x160515)
#11 0x7fd27197738a (/usr/lib/x86_64-linux-gnu/libQt5Core.so.5+0x28638a)
#12 0x7fd2719cc5ec (/usr/lib/x86_64-linux-gnu/libQt5Core.so.5+0x2db5ec)
#13 0x7fd2719ccaf0 (/usr/lib/x86_64-linux-gnu/libQt5Core.so.5+0x2dbaf0)
#14 0x7fd270160196 (/lib/x86_64-linux-gnu/libglib-2.0.so.0+0x4a196)
#15 0x7fd2701603ef (/lib/x86_64-linux-gnu/libglib-2.0.so.0+0x4a3ef)
#16 0x7fd27016049b (/lib/x86_64-linux-gnu/libglib-2.0.so.0+0x4a49b)
#17 0x7fd2719cd7ea (/usr/lib/x86_64-linux-gnu/libQt5Core.so.5+0x2dc7ea)
#18 0x7fd271974b49 (/usr/lib/x86_64-linux-gnu/libQt5Core.so.5+0x283b49)
#19 0x7fd27197cbeb (/usr/lib/x86_64-linux-gnu/libQt5Core.so.5+0x28bbeb)
#20 0x49f1eb (/home/zhfu/catkin_ws/devel/lib/turtlesim/turtlesim_node+0x49f1eb)
#21 0x49e9f1 (/home/zhfu/catkin_ws/devel/lib/turtlesim/turtlesim_node+0x49e9f1)
#22 0x7fd27069a82f (/lib/x86_64-linux-gnu/libc.so.6+0x2082f)
#23 0x477588 (/home/zhfu/catkin_ws/devel/lib/turtlesim/turtlesim_node+0x477588)
Zhoulai
1. Make sure you built with debug symbols (-g)
2. Install debug symbols for all the libs you link to (well, at least
the ones in backtrace)
3. Read https://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html#stack-traces-and-report-symbolization
In particular, "Make sure llvm-symbolizer binary is in PATH."
I doubt it will accept llvm-symbolizer-${VERSION}, so you may need
to make a symlink