Skip to content
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

Show useful error message on invalid XML instead of crash #40

Open
Roboterbastler opened this issue Jan 19, 2024 · 1 comment
Open

Show useful error message on invalid XML instead of crash #40

Roboterbastler opened this issue Jan 19, 2024 · 1 comment
Assignees
Labels
bug Something isn't working

Comments

@Roboterbastler
Copy link

Roboterbastler commented Jan 19, 2024

Is your feature request related to a problem? Please describe.
I came across this problem when I accidentally had an invalid name="..." attribute in some of the SubTree XML tags, e.g. like this:

<SubTree ID="MySubTree"
         name="MySubTree"
         some_remap="{some_remap}" />

According to the docs the SubTree tag does not take a name attribute, so this XML was invalid and name probably interpreted as a port.
While the behavior tree would run without any complaint, when trying to connect Groot2 monitoring then Groot2 just crashes without any meaningful message. It took me quite a while to find the cause of this.

When removing the name attributes the same tree can be monitored with Groot2.

Describe the solution you'd like
Instead of a cryptic crash it would be nice if an error message informed me that the XML is invalid, ideally point me roughly to the place where it is invalid.

Additional context
The stack trace of the crash is the following:

version: 1.5.1
Stack trace (most recent call last):
#0  | Source "/usr/include/c++/9/bits/std_function.h", line 300, in _M_invoke
    |   299:       {
    | > 300: 	(*_Base::_M_get_pointer(__functor))(
    |   301: 	    std::forward<_ArgTypes>(__args)...);
    | Source "/media/davide/DATA/ws_behavior/src/Groot2/src_gui/monitor/monitor_mode.cpp", line 500, in operator()
      Source "/home/davide/QtDev/6.5.2/gcc_64/include/QtCore/qstring.h", line 1552, in QString::fromStdString(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) [0x56413fe9ffd6]
#1  | Source "/media/davide/DATA/ws_behavior/src/Groot2/src_gui/monitor/monitor_mode.cpp", line 507, in MonitorMode::addTreeItems(QString const&, QMap<QString, std::shared_ptr<groot::TreeInstance> > const&)
      Source "/usr/include/c++/9/bits/std_function.h", line 688, in std::function<void (QString)>::operator()(QString) const [0x56413ffaff14]
        687: 	__throw_bad_function_call();
      > 688:       return _M_invoker(_M_functor, std::forward<_ArgTypes>(__args)...);
        689:     }
#2    Source "/media/davide/DATA/ws_behavior/src/Groot2/src_gui/monitor/monitor_mode.cpp", line 429, in MonitorMode::loadZMQTree(QByteArray const&) [0x56413ffb3300]
#3  | Source "/home/davide/QtDev/6.5.2/gcc_64/include/QtCore/qobjectdefs_impl.h", line 409, in impl
    | Source "/home/davide/QtDev/6.5.2/gcc_64/include/QtCore/qobjectdefs_impl.h", line 241, in call<QtPrivate::List<>, void>
    | Source "/home/davide/QtDev/6.5.2/gcc_64/include/QtCore/qobjectdefs_impl.h", line 127, in call
      Source "/media/davide/DATA/ws_behavior/src/Groot2/src_gui/monitor/monitor_mode.cpp", line 147, in operator() [0x56413ffb367b]
#4    Object "/tmp/.mount_Groot2LPp30z/usr/bin/../lib/libQt6Core.so.6", at 0x7f6f71135f9b, in QObject::event(QEvent*)
#5    Object "/tmp/.mount_Groot2LPp30z/usr/bin/../lib/libQt6Widgets.so.6", at 0x7f6f723a2ff1, in QApplicationPrivate::notify_helper(QObject*, QEvent*)
#6    Object "/tmp/.mount_Groot2LPp30z/usr/bin/../lib/libQt6Core.so.6", at 0x7f6f710e69e9, in QCoreApplication::notifyInternal2(QObject*, QEvent*)
#7    Object "/tmp/.mount_Groot2LPp30z/usr/bin/../lib/libQt6Core.so.6", at 0x7f6f710e9c0c, in QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*)
#8    Object "/tmp/.mount_Groot2LPp30z/usr/bin/../lib/libQt6Core.so.6", at 0x7f6f71391df2, in QEventDispatcherGlibPrivate::runTimersOnceWithNormalPriority()
#9    Object "/tmp/.mount_Groot2LPp30z/usr/bin/../lib/libglib-2.0.so.0", at 0x7f6f7063317c, in g_main_context_dispatch
#10   Object "/tmp/.mount_Groot2LPp30z/usr/bin/../lib/libglib-2.0.so.0", at 0x7f6f706333ff, in g_main_context_dispatch
#11   Object "/tmp/.mount_Groot2LPp30z/usr/bin/../lib/libglib-2.0.so.0", at 0x7f6f706334a2, in g_main_context_iteration
#12   Object "/tmp/.mount_Groot2LPp30z/usr/bin/../lib/libQt6Core.so.6", at 0x7f6f71391779, in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>)
#13   Object "/tmp/.mount_Groot2LPp30z/usr/bin/../lib/libQt6Core.so.6", at 0x7f6f710f22ea, in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>)
#14   Object "/tmp/.mount_Groot2LPp30z/usr/bin/../lib/libQt6Core.so.6", at 0x7f6f710eeb1d, in QCoreApplication::exec()
#15   Source "/media/davide/DATA/ws_behavior/src/Groot2/src_gui/main.cpp", line 190, in main [0x56413feb06ed]
-----------------------------
@facontidavide
Copy link
Contributor

Hi,

thanks a lot for figuring this out.
I will fix it as soon as possible!

@facontidavide facontidavide self-assigned this Jan 19, 2024
@facontidavide facontidavide added the bug Something isn't working label Jan 19, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants