juzzlin / DustRacing2D

Dust Racing 2D is a traditional top-down car racing game including a level editor.
http://juzzlin.github.io/DustRacing2D/index.html
GNU General Public License v3.0
301 stars 67 forks source link

fails to build on OpenBSD with qt 5.15 #119

Open landryb opened 3 years ago

landryb commented 3 years ago

i guess since f7edcad3 the build fails on openbsd, just tried 2.1.0 (2.0.3 was failing at runtime after 5s it was crashing), build fails on all the calls to bindValue:

/usr/obj/ports/dustrac-2.1.0/DustRacing2D-2.1.0/src/game/database.cpp:134:11: error: no matching member function for call to 'bindValue'                                      
    query.bindValue(":version", TRACK_SET_VERSION);                                                                                                                           
    ~~~~~~^~~~~~~~~                                                                                                                                                           
/usr/local/include/X11/qt5/QtSql/qsqlquery.h:104:10: note: candidate function not viable: no known conversion from 'const int' to 'const QVariant' for 2nd argument           
    void bindValue(const QString& placeholder, const QVariant& val,                                                                                                           
         ^                                                                                                                                                                    
/usr/local/include/X11/qt5/QtSql/qsqlquery.h:106:10: note: candidate function not viable: no known conversion from 'const char [9]' to 'int' for 1st argument                 
    void bindValue(int pos, const QVariant& val, QSql::ParamType type = QSql::In);                                                                                            
         ^                                                                                                                                                                    
/usr/obj/ports/dustrac-2.1.0/DustRacing2D-2.1.0/src/game/database.cpp:135:11: error: no matching member function for call to 'bindValue'                                      
    query.bindValue(":track_name", track.trackData().name());                                                                                                                 
    ~~~~~~^~~~~~~~~                                                                                                                                                           
/usr/local/include/X11/qt5/QtSql/qsqlquery.h:104:10: note: candidate function not viable: no known conversion from 'QString' to 'const QVariant' for 2nd argument             
    void bindValue(const QString& placeholder, const QVariant& val,                                                                                                           
         ^                                                                                                                                                                    
/usr/local/include/X11/qt5/QtSql/qsqlquery.h:106:10: note: candidate function not viable: no known conversion from 'const char [12]' to 'int' for 1st argument                
    void bindValue(int pos, const QVariant& val, QSql::ParamType type = QSql::In);                                                                                            
         ^                                                                                                                                                                    
/usr/obj/ports/dustrac-2.1.0/DustRacing2D-2.1.0/src/game/database.cpp:148:15: error: no matching member function for call to 'bindValue'                                      
        query.bindValue(":version", TRACK_SET_VERSION);                                                                                                                       
        ~~~~~~^~~~~~~~~                                                                                                                                                       
/usr/local/include/X11/qt5/QtSql/qsqlquery.h:104:10: note: candidate function not viable: no known conversion from 'const int' to 'const QVariant' for 2nd argument           
    void bindValue(const QString& placeholder, const QVariant& val,                                                                                                           
         ^                                                                                                                                                                    
/usr/local/include/X11/qt5/QtSql/qsqlquery.h:106:10: note: candidate function not viable: no known conversion from 'const char [9]' to 'int' for 1st argument                 
    void bindValue(int pos, const QVariant& val, QSql::ParamType type = QSql::In);                                                                                            
         ^                                                                                                                                                                    
/usr/obj/ports/dustrac-2.1.0/DustRacing2D-2.1.0/src/game/database.cpp:149:15: error: no matching member function for call to 'bindValue'                                      
        query.bindValue(":track_name", track.trackData().name());  
juzzlin commented 3 years ago

Is this the current master? I remember I have already fixed a similar issue by adding #include <QVariant> to database.cpp. I can build against Qt 5.15.2 but that's on Ubuntu.

landryb commented 3 years ago

that was with 2.1.0, not master. I see QVariant was added in 8af0bfe0c5 but now that i see 2.1.1 was released will recheck with this new version.

juzzlin commented 3 years ago

Yes please do as that fix was not included in 2.1.0 :)

landryb commented 3 years ago

2.1.1 builds fine on OpenBSD (and yes we build with -DQOpenGLFunctions=OFF, i dont fully remember why exactly though), but segfaults when trying to start a game.. that's probably the same failure i was seeing with 2.0.3, and explains why we still only package 1.13.0.

Program terminated with signal SIGSEGV, Segmentation fault.
#0  0x00000207fb18df0f in MCObject::index() const ()
[Current thread is 1 (process 289236)]
(gdb) bt
#0  0x00000207fb18df0f in MCObject::index() const ()
#1  0x00000207fb1955f3 in MCWorld::removeObjectNow(MCObject&) ()
#2  0x00000207fb18eae9 in MCObject::Impl::removeFromWorldNow() ()
#3  0x00000207fb18fc4f in MCObject::Impl::~Impl() ()
#4  0x00000207fb18e33f in MCObject::~MCObject() ()
#5  0x00000207fb194884 in MCWorld::setDimensions(float, float, float, float, float, float, float, bool, unsigned long) ()
#6  0x00000207fb1320da in Scene::setActiveTrack(std::__1::shared_ptr<Track>) ()
#7  0x00000207fb17a06a in TrackSelectionMenu::selectCurrentItem() ()
#8  0x00000207fb1101ae in EventHandler::handleMenuKeyPressEvent(QKeyEvent*) ()
#9  0x00000207fb12b960 in Renderer::keyPressEvent(QKeyEvent*) ()
#10 0x0000020a01f3c11f in QWindow::event(QEvent*) () from /usr/local/lib/qt5/./libQt5Gui.so.3.0
#11 0x0000020a527b4db6 in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /usr/local/lib/qt5/./libQt5Widgets.so.3.0
#12 0x0000020a527b6af1 in QApplication::notify(QObject*, QEvent*) () from /usr/local/lib/qt5/./libQt5Widgets.so.3.0
#13 0x00000207fb0fb9da in Application::notify(QObject*, QEvent*) ()
#14 0x0000020a57a761f5 in QCoreApplication::notifyInternal2(QObject*, QEvent*) () from /usr/local/lib/qt5/./libQt5Core.so.3.0
#15 0x0000020a57a76fc9 in QCoreApplication::sendSpontaneousEvent(QObject*, QEvent*) () from /usr/local/lib/qt5/./libQt5Core.so.3.0
#16 0x0000020a01f2130a in QGuiApplicationPrivate::processKeyEvent(QWindowSystemInterfacePrivate::KeyEvent*) () from /usr/local/lib/qt5/./libQt5Gui.so.3.0
#17 0x0000020a01f1fb81 in QGuiApplicationPrivate::processWindowSystemEvent(QWindowSystemInterfacePrivate::WindowSystemEvent*) () from /usr/local/lib/qt5/./libQt5Gui.so.3.0
#18 0x0000020a01ef1f7a in QWindowSystemInterface::sendWindowSystemEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/local/lib/qt5/./libQt5Gui.so.3.0
#19 0x0000020a2ee848dd in xcbSourceDispatch(_GSource*, int (*)(void*), void*) () from /usr/local/lib/qt5/libQt5XcbQpa.so.0.0
#20 0x0000020aa357e80f in g_main_context_dispatch () from /usr/local/lib/libglib-2.0.so.4201.5
#21 0x0000020aa357ebd0 in g_main_context_iterate () from /usr/local/lib/libglib-2.0.so.4201.5
#22 0x0000020aa357ecb5 in g_main_context_iteration () from /usr/local/lib/libglib-2.0.so.4201.5
#23 0x0000020a57b5057b in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/local/lib/qt5/./libQt5Core.so.3.0
#24 0x0000020a2ee84a70 in QXcbGlibEventDispatcher::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/local/lib/qt5/libQt5XcbQpa.so.0.0
#25 0x0000020a57a71183 in QEventLoop::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/local/lib/qt5/./libQt5Core.so.3.0
#26 0x0000020a57a713d6 in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/local/lib/qt5/./libQt5Core.so.3.0
#27 0x0000020a57a76c07 in QCoreApplication::exec() () from /usr/local/lib/qt5/./libQt5Core.so.3.0
#28 0x0000020a01f1f294 in QGuiApplication::exec() () from /usr/local/lib/qt5/./libQt5Gui.so.3.0
#29 0x0000020a527b63e7 in QApplication::exec() () from /usr/local/lib/qt5/./libQt5Widgets.so.3.0
#30 0x00000207fb119f7f in main ()
juzzlin commented 3 years ago

Seems to crash when destroying and removing a game object (I suspect it's the area wall).

What do you do when it crashes? You just start the game, select a track and it crashes?

landryb commented 3 years ago

yes, it crashes just after selecting a track

juzzlin commented 3 years ago

Could you run ctest after build?

Should look like this:

` $ ctest Start 1: MCForceRegistryTest 1/5 Test #1: MCForceRegistryTest .............. Passed 0.03 sec Start 2: MCObjectTest 2/5 Test #2: MCObjectTest ..................... Passed 0.10 sec Start 3: MCMeshLoaderTest 3/5 Test #3: MCMeshLoaderTest ................. Passed 0.00 sec Start 4: MCWorldTest 4/5 Test #4: MCWorldTest ...................... Passed 0.05 sec Start 5: gearboxtest 5/5 Test #5: gearboxtest ...................... Passed 0.00 sec

100% tests passed, 0 tests failed out of 5

Total Test time (real) = 0.19 sec `

landryb commented 3 years ago

looks.. pretty bad here:

Test project /usr/obj/ports/dustrac-2.1.1/build-amd64
    Start 1: MCForceRegistryTest
1/5 Test #1: MCForceRegistryTest ..............Subprocess aborted***Exception:   1.06 sec
    Start 2: MCObjectTest
2/5 Test #2: MCObjectTest .....................Subprocess aborted***Exception:   0.23 sec
    Start 3: MCMeshLoaderTest
3/5 Test #3: MCMeshLoaderTest .................   Passed    0.19 sec
    Start 4: MCWorldTest
4/5 Test #4: MCWorldTest ......................Subprocess aborted***Exception:   0.22 sec
    Start 5: gearboxtest
5/5 Test #5: gearboxtest ......................   Passed    0.03 sec

40% tests passed, 3 tests failed out of 5

Total Test time (real) =   1.83 sec

The following tests FAILED:
          1 - MCForceRegistryTest (Subprocess aborted)
          2 - MCObjectTest (Subprocess aborted)
          4 - MCWorldTest (Subprocess aborted)
juzzlin commented 3 years ago

Try ctest --extra-verbose to get some explanation.

landryb commented 3 years ago

only the failing ones:

1: Test command: /usr/obj/ports/dustrac-2.1.1/DustRacing2D-2.1.1/unittests/MCForceRegistryTest                                                                                                                                                 
1: Test timeout computed to be: 10000000                                                                                                                                                                                                       
1: ********* Start testing of MCForceRegistryTest *********                                                                                                                                                                                    
1: Config: Using QtTest library 5.15.2, Qt 5.15.2 (x86_64-little_endian-lp64 shared (dynamic) release build; by Clang 10.0.1 ), unknown unknown                                                                                                
1: PASS   : MCForceRegistryTest::initTestCase()                                                                                                                                                                                                
1: PASS   : MCForceRegistryTest::testAddUpdateRemove()                                                                                                                                                                                         
1: QFATAL : MCForceRegistryTest::testAddUpdateRemoveMulti() Received signal 11                                                                                                                                                                 
1:          Function time: 27ms Total time: 66ms                                                                                                                                                                                               
1: FAIL!  : MCForceRegistryTest::testAddUpdateRemoveMulti() Received a fatal error.                                                                                                                                                            
1:    Loc: [Unknown file(0)]                                                                                                                                                                                                                   
1: Totals: 2 passed, 1 failed, 0 skipped, 0 blacklisted, 67ms                                                                                                                                                                                  
1: ********* Finished testing of MCForceRegistryTest *********                                                                                                                                                                                 
1/5 Test #1: MCForceRegistryTest ..............Subprocess aborted***Exception:   0.14 sec       

2: Test command: /usr/obj/ports/dustrac-2.1.1/DustRacing2D-2.1.1/unittests/MCObjectTest                                                                                                                                                        
2: Test timeout computed to be: 10000000                                                                                                                                                                                                       
2: ********* Start testing of MCObjectTest *********                                                                                                                                                                                           
2: Config: Using QtTest library 5.15.2, Qt 5.15.2 (x86_64-little_endian-lp64 shared (dynamic) release build; by Clang 10.0.1 ), unknown unknown                                                                                                
2: PASS   : MCObjectTest::initTestCase()                                                                                                                                                                                                       
2: QFATAL : MCObjectTest::testAddChildren() Received signal 11                                                                                                                                                                                 
2:          Function time: 29ms Total time: 33ms                                                                                                                                                                                               
2: FAIL!  : MCObjectTest::testAddChildren() Received a fatal error.
2:    Loc: [Unknown file(0)]
2: Totals: 1 passed, 1 failed, 0 skipped, 0 blacklisted, 34ms
2: ********* Finished testing of MCObjectTest *********
2/5 Test #2: MCObjectTest .....................Subprocess aborted***Exception:   0.15 sec

4: Test command: /usr/obj/ports/dustrac-2.1.1/DustRacing2D-2.1.1/unittests/MCWorldTest
4: Test timeout computed to be: 10000000
4: ********* Start testing of MCWorldTest *********
4: Config: Using QtTest library 5.15.2, Qt 5.15.2 (x86_64-little_endian-lp64 shared (dynamic) release build; by Clang 10.0.1 ), unknown unknown
4: PASS   : MCWorldTest::initTestCase()
4: QFATAL : MCWorldTest::testAddToWorld() Received signal 11
4:          Function time: 29ms Total time: 33ms
4: FAIL!  : MCWorldTest::testAddToWorld() Received a fatal error.
4:    Loc: [Unknown file(0)]
4: Totals: 1 passed, 1 failed, 0 skipped, 0 blacklisted, 34ms
4: ********* Finished testing of MCWorldTest *********
4/5 Test #4: MCWorldTest ......................Subprocess aborted***Exception:   0.17 sec

and within gdb:

Reading symbols from ../DustRacing2D-2.1.1/unittests/MCObjectTest...(no debugging symbols found)...done.
(gdb) r
Starting program: /usr/obj/ports/dustrac-2.1.1/DustRacing2D-2.1.1/unittests/MCObjectTest 
********* Start testing of MCObjectTest *********
Config: Using QtTest library 5.15.2, Qt 5.15.2 (x86_64-little_endian-lp64 shared (dynamic) release build; by Clang 10.0.1 ), unknown unknown
PASS   : MCObjectTest::initTestCase()
[New thread 208654]

Thread 1 received signal SIGSEGV, Segmentation fault.
0x0000071c610e6e4f in MCObject::index() const ()
(gdb) bt
#0  0x0000071c610e6e4f in MCObject::index() const ()
#1  0x0000071c610ecaa3 in MCWorld::removeObjectNow(MCObject&) ()
#2  0x0000071c610e7a29 in MCObject::Impl::removeFromWorldNow() ()
#3  0x0000071c610e8f9f in MCObject::Impl::~Impl() ()
#4  0x0000071c610e7227 in MCObject::~MCObject() ()
#5  0x0000071c610e0000 in MCObjectTest::testAddChildren() ()
#6  0x0000071eb280b0a7 in QMetaMethod::invoke(QObject*, Qt::ConnectionType, QGenericReturnArgument, QGenericArgument, QGenericArgument, QGenericArgument, QGenericArgument, QGenericArgument, QGenericArgument, QGenericArgument, QGenericArgument, QGenericArgument, QGenericArgument) const () from /usr/local/lib/qt5/./libQt5Core.so.3.0
#7  0x0000071ef8e6b444 in QMetaMethod::invoke(QObject*, Qt::ConnectionType, QGenericArgument, QGenericArgument, QGenericArgument, QGenericArgument, QGenericArgument, QGenericArgument, QGenericArgument, QGenericArgument, QGenericArgument, QGenericArgument) const () from /usr/local/lib/qt5/./libQt5Test.so.3.0
#8  0x0000071ef8e61c31 in QTest::TestMethods::invokeTestOnData(int) const () from /usr/local/lib/qt5/./libQt5Test.so.3.0
#9  0x0000071ef8e62c82 in QTest::TestMethods::invokeTest(int, char const*, QTest::WatchDog*) const () from /usr/local/lib/qt5/./libQt5Test.so.3.0
#10 0x0000071ef8e64800 in QTest::TestMethods::invokeTests(QObject*) const () from /usr/local/lib/qt5/./libQt5Test.so.3.0
#11 0x0000071ef8e6516b in QTest::qRun() () from /usr/local/lib/qt5/./libQt5Test.so.3.0
#12 0x0000071ef8e64be5 in QTest::qExec(QObject*, int, char**) () from /usr/local/lib/qt5/./libQt5Test.so.3.0
#13 0x0000071c610e5370 in main ()

note that OpenBSD has a somewhat aggressive memory management, so if you reuse some freed memory you fail hard/etc..

juzzlin commented 3 years ago

For some reason the destruction sequence of MCObject makes it go crazy. I just don't understand why. The funny thing is that deletion only happens once so there shouldn't be any reuse of freed memory.

juzzlin commented 3 years ago

I tried to run the tests under valgrind and it reported:

==3389208== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)

landryb commented 3 years ago

Fwiw here's the build options we're using: https://github.com/openbsd/ports/blob/master/games/dustrac/Makefile#L31

juzzlin commented 3 years ago

Could you try the current dev branch (ae380b82bfdb89ad4dd96510a69d9057d8029b6a) ?

landryb commented 3 years ago

looks definitely helpful, with that commit backported on top of 2.1.1, the test succeeds:

Reading symbols from unittests/MCWorldTest...(no debugging symbols found)...done.
(gdb) r
Starting program: /usr/obj/ports/dustrac-2.1.1/DustRacing2D-2.1.1/unittests/MCWorldTest 
********* Start testing of MCWorldTest *********
Config: Using QtTest library 5.15.2, Qt 5.15.2 (x86_64-little_endian-lp64 shared (dynamic) release build; by Clang 10.0.1 ), unknown unknown
PASS   : MCWorldTest::initTestCase()
PASS   : MCWorldTest::testAddToWorld()
PASS   : MCWorldTest::testCollisionEvent_RectRect()
PASS   : MCWorldTest::testCollisionEvent_RectCircle()
PASS   : MCWorldTest::testCollisionEvent_CircleCircle()
PASS   : MCWorldTest::testInstance()
PASS   : MCWorldTest::testSetDimensions()
PASS   : MCWorldTest::testSleepingObjectRemovalFromIntegration()
PASS   : MCWorldTest::cleanupTestCase()
Totals: 9 passed, 0 failed, 0 skipped, 0 blacklisted, 272ms
********* Finished testing of MCWorldTest *********
[Inferior 1 (process 79085) exited normally]

i can start a game, the map & cars are displayed, there's the countdown, but when the countdown reaches zero there's another (different) segfault - i think that matches the failure i was seeing with 2.0.3:

#0  0x0000058b101d958b in MCObject::isPhysicsObject() const ()
[Current thread is 1 (process 525286)]
(gdb) bt
#0  0x0000058b101d958b in MCObject::isPhysicsObject() const ()
#1  0x0000058b101e12a5 in MCWorld::integrate(int) ()
#2  0x0000058b101e1edc in MCWorld::stepTime(int) ()
#3  0x0000058b1017d399 in Scene::updateFrame(InputHandler&, int) ()
#4  0x0000058b10163110 in QtPrivate::QFunctorSlotObject<Game::Game(int&, char**)::$_3, 0, QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) ()
#5  0x0000058d11b43e51 in QtPrivate::QSlotObjectBase::call(QObject*, void**) () from /usr/local/lib/qt5/./libQt5Core.so.3.0
#6  0x0000058d11ba5741 in void doActivate<false>(QObject*, int, void**) () from /usr/local/lib/qt5/./libQt5Core.so.3.0
#7  0x0000058d11b9d0e1 in QMetaObject::activate(QObject*, QMetaObject const*, int, void**) () from /usr/local/lib/qt5/./libQt5Core.so.3.0
#8  0x0000058d11bb644f in QTimer::timeout(QTimer::QPrivateSignal) () from /usr/local/lib/qt5/./libQt5Core.so.3.0
#9  0x0000058d11bb63e3 in QTimer::timerEvent(QTimerEvent*) () from /usr/local/lib/qt5/./libQt5Core.so.3.0
#10 0x0000058d11b9529e in QObject::event(QEvent*) () from /usr/local/lib/qt5/./libQt5Core.so.3.0
#11 0x0000058dafabddb6 in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /usr/local/lib/qt5/./libQt5Widgets.so.3.0
#12 0x0000058dafabfaf1 in QApplication::notify(QObject*, QEvent*) () from /usr/local/lib/qt5/./libQt5Widgets.so.3.0
#13 0x0000058b1014793a in Application::notify(QObject*, QEvent*) ()
#14 0x0000058d11b2c1f5 in QCoreApplication::notifyInternal2(QObject*, QEvent*) () from /usr/local/lib/qt5/./libQt5Core.so.3.0
#15 0x0000058d11b2cf55 in QCoreApplication::sendEvent(QObject*, QEvent*) () from /usr/local/lib/qt5/./libQt5Core.so.3.0
#16 0x0000058d11c04125 in QTimerInfoList::activateTimers() () from /usr/local/lib/qt5/./libQt5Core.so.3.0
#17 0x0000058d11c074fe in timerSourceDispatch(_GSource*, int (*)(void*), void*) () from /usr/local/lib/qt5/./libQt5Core.so.3.0
#18 0x0000058d11c07896 in idleTimerSourceDispatch(_GSource*, int (*)(void*), void*) () from /usr/local/lib/qt5/./libQt5Core.so.3.0
#19 0x0000058d39db480f in g_main_context_dispatch () from /usr/local/lib/libglib-2.0.so.4201.5
#20 0x0000058d39db4bd0 in g_main_context_iterate () from /usr/local/lib/libglib-2.0.so.4201.5
#21 0x0000058d39db4cb5 in g_main_context_iteration () from /usr/local/lib/libglib-2.0.so.4201.5
#22 0x0000058d11c0657b in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/local/lib/qt5/./libQt5Core.so.3.0
#23 0x0000058dd9438a70 in QXcbGlibEventDispatcher::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/local/lib/qt5/libQt5XcbQpa.so.0.0
#24 0x0000058d11b27183 in QEventLoop::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/local/lib/qt5/./libQt5Core.so.3.0
#25 0x0000058d11b273d6 in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/local/lib/qt5/./libQt5Core.so.3.0
#26 0x0000058d11b2cc07 in QCoreApplication::exec() () from /usr/local/lib/qt5/./libQt5Core.so.3.0
#27 0x0000058dc0e19294 in QGuiApplication::exec() () from /usr/local/lib/qt5/./libQt5Gui.so.3.0
#28 0x0000058dafabf3e7 in QApplication::exec() () from /usr/local/lib/qt5/./libQt5Widgets.so.3.0
#29 0x0000058b10165edf in main ()
juzzlin commented 3 years ago

Cool! :)

That another problem seems to be even trickier as there's no deletion involved, but still some a corrupted object, I guess. Would be useful to add some debug prints to MCWorld::integrate() perhaps and print the name of the objects it tries to operate on.

landryb commented 3 years ago

sure, can try that if you tell me what to add where :) i have zero knowledge in dustrac code / classes :)

juzzlin commented 3 years ago

I added some debug prints to bsd branch (61985b9ed39570c7c7395800edfa6b8dd390edf3). Let's see what this reveals.

landryb commented 3 years ago

dustrac.log.gz

it integrated ... many things, before blowing (19Mb log)

juzzlin commented 3 years ago

But it eventually crashed? Hmm...I thought that it would crash immediately...damn...

juzzlin commented 3 years ago

Would it be possible for you to git bisect the first commit that causes this?

landryb commented 3 years ago

that will be .. painful to say the least. Is it supposed to loop so many times on this method ? i saw 'start integration' 270 times in the log before the crash. i thought it was related to the end of the countdown as soon as vehicles start moving...

juzzlin commented 3 years ago

What I meant was to just use git bisect to find out the first breaking commit somewhere near the version 2.0.3. - without any debug prints. Just find out the first commit that crashes when the game is started. Git bisect works so that first you identify some known working commit in the past and then some known failing commit. After each step you'd build and run and mark the current commit good or bad. This process is logarithmic so even if there are hundreds of commits it won't take that many steps to complete. Very cool! :)

juzzlin commented 3 years ago

Btw, is it possible to run OpenBSD in VirtualBox on Ubuntu so that I could test this?

landryb commented 3 years ago

i know git bisect, it will just take me some time to setup an env where i'd build from git that's all. Lots of things (for cmake) are setupped by the ports infrastructure..

and yeah, ofc you can run OpenBSD in Virtualbox (or KVM) with X, you'll probably just need to install cmake/openal via the packages.

then,

git clone
mkdir build
cd build
CMAKE_PREFIX_PATH=/usr/local/lib/qt5/cmake cmake .. -DReleaseBuild=ON -DQOpenGLFunctions=OFF
make