<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/58525>58525</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [LLDB] options --source-on-crash and --one-line-on-crash are ignored if crash happens in a non-main thread
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          DoDoENT
      </td>
    </tr>
</table>

<pre>
    Consider this program:

```c++
#include <cstdio>
#include <thread>

int main()
{
    auto crasher
    {
        []()
        {
            int * p = reinterpret_cast< int * >( 42 );
            std::printf( "Evil number: %d\n", *p );
        }
    };

    std::thread cthread{ crasher };

    cthread.join();
    return 0;
}
```

Compile it with `clang++ crash.cpp -std=c++20 -o crash` and then run under LLDB with following command:

`lldb --batch --one-line 'run' --one-line-on-crash 'thread backtrace all'  --one-line-on-crash 'quit 1' -- ./crash`

The output on my M1 MacPro is

```
(lldb) run
Process 41725 stopped
* thread #2, stop reason = EXC_BAD_ACCESS (code=1, address=0x2a)
    frame #0: 0x00000001000039e8 crash`main::$_0::operator()() const + 28
crash`main::$_0::operator()() const:
->  0x1000039e8 <+28>: ldr    w9, [x8]
    0x1000039ec <+32>: mov    x8, x9
    0x1000039f0 <+36>: mov    x9, sp
    0x1000039f4 <+40>: str    x8, [x9]
Target 0: (crash) stopped.
Process 41725 launched: '/Users/dodo/builds/core-neural-network/clang/release/crash' (arm64)
```

As you can see, `thread backtrace all` wasn't executed. You can easily verify that by comparing the output when running LLDB in an interactive mode:

```
[dodo@nm-nmiksa: release]$ lldb -- ./crash
(lldb) target create "./crash"
Current executable set to '/Users/dodo/builds/core-neural-network/clang/release/crash' (arm64).
(lldb) run
Process 51423 launched: '/Users/dodo/builds/core-neural-network/clang/release/crash' (arm64)
Process 51423 stopped
* thread #2, stop reason = EXC_BAD_ACCESS (code=1, address=0x2a)
    frame #0: 0x00000001000039e8 crash`main::$_0::operator()() const + 28
crash`main::$_0::operator()() const:
->  0x1000039e8 <+28>: ldr    w9, [x8]
    0x1000039ec <+32>: mov    x8, x9
    0x1000039f0 <+36>: mov    x9, sp
    0x1000039f4 <+40>: str    x8, [x9]
Target 0: (crash) stopped.
(lldb) thread backtrace all
  thread #1, queue = 'com.apple.main-thread'
    frame #0: 0x000000019f418834 libsystem_kernel.dylib`__ulock_wait + 8
    frame #1: 0x000000019f4565a0 libsystem_pthread.dylib`_pthread_join + 444
    frame #2: 0x000000019f3afa14 libc++.1.dylib`std::__1::thread::join() + 36
    frame #3: 0x0000000100002dac crash`main + 52
    frame #4: 0x000000010001108c dyld`start + 520
* thread #2, stop reason = EXC_BAD_ACCESS (code=1, address=0x2a)
  * frame #0: 0x00000001000039e8 crash`main::$_0::operator()() const + 28
    frame #1: 0x0000000100003988 crash`decltype(static_cast<main::$_0>(fp)()) std::__1::__invoke<main::$_0>(main::$_0&&) + 24
    frame #2: 0x0000000100003924 crash`void std::__1::__thread_execute<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, main::$_0>(std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, main::$_0>&, std::__1::__tuple_indices<>) + 32
    frame #3: 0x00000001000030f4 crash`void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, main::$_0> >(void*) + 84
    frame #4: 0x000000019f45426c libsystem_pthread.dylib`_pthread_start + 148
(lldb) quit
Quitting LLDB will kill one or more processes. Do you really want to proceed: [Y/n] y
```

However, if I cause a crash on the main thread (in function `main`), like this:

```c++
#include <cstdio>
#include <thread>

int main()
{
    auto crasher
    {
        []()
        {
            int * p = reinterpret_cast< int * >( 42 );
            std::printf( "Evil number: %d\n", *p );
        }
    };

    // std::thread cthread{ crasher };

    // cthread.join();
    crasher();
    return 0;
}
```

then LLDB works as expected:

```
[dodo@nm-nmiksa: release]$ lldb --batch --one-line 'run' --one-line-on-crash 'thread backtrace all' --one-line-on-crash 'quit 1'  -- ./crash
(lldb) target create "./crash"
Current executable set to '/Users/dodo/builds/core-neural-network/clang/release/crash' (arm64).
(lldb) run
Process 59018 stopped
* thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0x2a)
    frame #0: 0x0000000100003f70 crash`main::$_0::operator()() const + 28
crash`main::$_0::operator()() const:
->  0x100003f70 <+28>: ldr    w9, [x8]
    0x100003f74 <+32>: mov    x8, x9
    0x100003f78 <+36>: mov    x9, sp
    0x100003f7c <+40>: str    x8, [x9]
Target 0: (crash) stopped.
Process 59018 launched: '/Users/dodo/builds/core-neural-network/clang/release/crash' (arm64)
(lldb) thread backtrace all
* thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0x2a)
  * frame #0: 0x0000000100003f70 crash`main::$_0::operator()() const + 28
    frame #1: 0x0000000100003f44 crash`main + 44
    frame #2: 0x000000010001108c dyld`start + 520
(lldb) quit 1
```

I can reproduce that with 1400.0.30.3, shipped with Xcode 14.0.1 and also with LLDB v15.0.3 compiled from LLVM source 15.0.3.

Also, if I put the commands into a file and use `--source-on-crash` instead of `--one-line-on-crash` I get the same behavior.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJztWd2P2jgQ_2vgxSJKnATCAw8LbHWV2tOd2jv1npBJnMVdE6e2A8t_fzN2CCxku9vetfehIgTEnm__Zjw2a1UcZgtVGVFwTexGGFJrdafZdhDfDMLlIDx-jkP_zgd0jm8_SmNR5bIpOBnEi9zYQqhBfNs3aTeas-I06T5FZcmWiWpAswGdtjOTVjiBF2usIrlmZsP1afQRiRtI54N0eS6lm7kkxReqHdAbUoNhS6I5PHNda25XOTMWjO0o0F6akYQSlBz3yAKfMVTxTa2BqUTqAaW3OyFJ1WzXYHYMYmhaDNIF-EkHdIGS616Bg8ny3MtlR3Aa7fT5gJK8DexkfozTE4wtYfBRdfE-Vw_eN7oi4YnzaEu39OcSF2pbC8mJsGQv7IYgMiSr7jw6vClBXtdk5AxetrChIRm1CwochFUFgI5XRDcVaSrE4Js3y7kXWSop1V5UdyRX2y2QXkNSymJNRqM1s_kGvlXFR1JUgDc6AYnweTYIP0ZOMc62wVuz_N5qlnPCpETyp-g_NeBo5AWSYEBfHV04N-j9hhPV2LqxRFVkeyBvI_KW5b9oRYTpTaZjomToCKwIxsGPAVPOjSFJNKEpLLqqa14cyW9Iaz-kmAMUzsMKMgN6EdK3Hxar-c1ydbNY3L57B2RZrgoOMxFSs6LQIBsewwfKHqVMCZmP4YtDhG34EPpXhB_xlGfd0rmsdTgc0GQV-p-q5ppZpVt4uU9YvMpgMs0JPDtFXymjW_4RZCUB405WQcoiuDJMV7BbFhqd2U9dsqXzhwyrQ-fkiTNvOSGKnnOrdkgBDMD5MO3hKcMjz_iCx2kzdR9P0vIkYctjrD7pQQunnYXvmb7jloS-bmQ-WBCDFgNBHz4ka6p8wwvPMwF8_ma4NvBdqELB17oRssDnXGk-qnijmYQvu1f6Hkd96r7SXAKIeIdvwDuYwPR2nJzqc185uDHkoBqSs4oYzp1T47A3ySDr98xgblrCH3jeWPCJ_NEyg3YhD2THtSgPgHJmyfqA-V8zjZXAnlJs39aNCsdd1RAVFBTiijnLrdhxWBpEff9G1j6mcxeiJKy2o2or7g3DIB4DgZtKQtoyc5b4l3lr_aLl4LDF_KEnUij5vmI2WvPq6DRbQ_E0wAL727dbseD5ApNGCY2_K4Aea_5R2n6Utsel7Tyt-ipIa8QJJ27lPzW84Q4hADooGAGra8kDXIhR2yIBrp9FAzgUZVkMOS_W5mAs367uua64DIoDDMHSrlaNVPn9as-EX_usR2p0JTUdpyw8k1q37Vgnth1YYX_m5CZJ0iOZXkqOWckiZ2_bYwVRJ7RrFler6Lxr9L9PnaDTB6t-rS6-ThZasPxRsjjulPZwJ1fcURRmOQH7Cmce07blDr91BUDJ36UGfA4IXlF2UlTwXNpDDRUzg2hYkR-PIFcW4EGkrDvFPm8ul3e1EtVO3fOnBFwO0rF7ewDQF-DNOwB74tGBnRJFryEtnNs9Hgy6JmoqAWkLyNe9050MKClNbj0WLokKXrJG2lUBO88Tai7lQIl10ViQ3hj1JE0DpeS_48G4Xw8IQT8AIYWADRjLNlK3yd-Xvj3JH4fl47XHtPqMwbVWD4den_5TQW0vAlqHj0HL-hLmouZh6U_oOH9J6T_VwyjJrjZDPIP6wV_hl-3a3r2QktzjBxxdidKwa2uO1zjYZXETkKVyzTmokNBb71nluk5H0HZ86fwPaNkq2KjJ4TNd_k9qz6E1xxCJkryGjr0xsCd7POCZF9tztyN0JTyDhxJ6SyuwereFFaRS11JIcc_drdNTTfqP26Z_9rYJUAHvr790avmfuXs6hvwv30q5uySfFHAuMYQZOG7VPLe85_Loa4-Bf99t07OXTf_bQ-c0jLLPHf2-oKX_bmfEchL-C8-IaNXXnRHLSfLFZ8Rykn3xGbGc5N_s-ssD6btef73kdPovAPOzx52_C87PHnfKJLk-Lr7kbPui4-Kj9giq5tObw2t3w6g5ND5Fk3N_u-j-aYiSMAzCIIa3W4GNQKj5uQ8YbaCA-cj9X8GkUX7KbTS7KEVWd0cpJHCVWm1h6ve3xKhGgx5PEJybcgMyui4KLzOxcWr_5TDYDijoqkr8fwU1YpMFvoxGXmC3V-BdqoDlQJip0pNcbShI9JpgSqEOg5Fe8w3bCaWDIZ9F4_E4TqM4jIbFLC6m8ZQNrbCSzyAt0UHsCVWN7ZshVxY48_p2MQYdqLirINsKdNIPbgDyvDLunpZUQHvWKg4bLWcba2vXCrqu4Q5i3KwDCAs8SLk7fo1gAT9ybPxfCWMajnmdZilNh5sZz8oC8Jax8ZTTYsKyfDpJ84zFRbROeMKHkq25NOgc7JEV3xMnAvfLdDkUMxpSGoU0iiIaJVHAkpJNknWSQR8PAkvoDzgYLQO0I1D6bqhnzqR1c2dgUgpjzWmSGQNB4C6WKB_6y43Ss6Vaqtuf3w-d6pkz_U8uxkTc">