Important: Please read the Qt Code of Conduct -

How does one debug libqtforandroid?

  • I am having a crash in my app and the backtrace doesn't really tell much about the crash. So, I'm planing to step through to find where it crashes.

    ********** Crash dump: **********
    Build fingerprint: 'samsung/gts4lltedd/gts4llte:9/PPR1.180610.011/T835DDU2BSD1:user/release-keys'
    pid: 11765, tid: 11765, name: org.kde.krita  >>> org.kde.krita <<<
    signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x18
    Stack frame #00 pc 0002d168  /data/data/org.kde.krita/qt-reserved-files/plugins/platforms/android/

    But, when I set a breakpoint on any symbol in it isn't found (I have compiled it with debug symbols). I can step through other Qt libraries like but not
    It doesn't help when I run it using lldb. Only one frame is returned (other frames don't give something meaningful either) in the backtrace:

    (lldb) bt
    * thread #1, name = 'org.kde.krita', stop reason = signal SIGSEGV: invalid address (fault address: 0x18)
      * frame #0: 0xca533168

    So, what am I doing wrong? What should I do to be able to step through in lldb?

  • I have no idea. But according to one post in StackOverflow one reason is that "A page was accessed that is not even mapped into the address space of the application at all. This will often result from dereferencing a null pointer or a pointer that was corrupted with a small integer value. This is reported as SEGV_MAPERR."

    So you should be able to find out where the crash happens in your code by traditional debugging techniques and check your pointers (and other problems). The assumption being that if the problem is in your code, it can be found in your code.

  • If the problem is with my code, I should have a proper backtrace (I think). But, the problem is only one frame is returned which makes this problem so much harder to solve.

    PS: I've disabled optimizations as well.

  • Lifetime Qt Champion

    @sh-zam said in How does one debug libqtforandroid?:

    Stack frame #00 pc 0002d168 /data/data/org.kde.krita/qt-reserved-files/plugins/platforms/android/

    There should be more in the stack trace.

  • @jsulm I'm afraid, what do you mean?

    This is the stack trace and as previously said, only one frame is returned :(

    (lldb) bt all
    * thread #1, name = 'org.kde.krita', stop reason = signal SIGSEGV: invalid address (fault address: 0x18)
      * frame #0: 0xca5bb168
      thread #2, name = 'Jit thread pool'
        frame #0: 0xe8d35f7c`syscall + 28
        frame #1: 0xe7828f96`art::ConditionVariable::WaitHoldingLocks(art::Thread*) + 82
        frame #2: 0xe7b09c8e`art::ThreadPool::GetTask(art::Thread*) + 178
        frame #3: 0xe7b09550`art::ThreadPoolWorker::Run() + 64
        frame #4: 0xe7b09184`art::ThreadPoolWorker::Callback(void*) + 96
        frame #5: 0xe8d90092`__pthread_start(void*) + 24
        frame #6: 0xe8d3a4d2`__start_thread + 26
      thread #3, name = 'Signal Catcher'