<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/129910>129910</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
LLDBCoreTests are crashing because of Telemetry
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
oontvoo
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
JDevlieghere
</td>
</tr>
</table>
<pre>
I can reproduce the crash locally with:
```
❯ lldb tools/lldb/unittests/Core/LLDBCoreTests
(lldb) target create "tools/lldb/unittests/Core/LLDBCoreTests"
Current executable set to '/Users/jonas/llvm/build-ra/tools/lldb/unittests/Core/LLDBCoreTests' (arm64).
(lldb) env GTEST_SHUFFLE=1
(lldb) env GTEST_TOTAL_SHARDS=17
(lldb) env GTEST_SHARD_INDEX=13
(lldb) env
target.env-vars (dictionary of strings) =
GTEST_SHARD_INDEX=13
GTEST_SHUFFLE=1
GTEST_TOTAL_SHARDS=17
```
(lldb) run
* thread #1, queue = 'com.apple.main-thread', stop reason = signal SIGABRT
frame #0: 0x00000001882bc388 libsystem_kernel.dylib`__pthread_kill + 8
libsystem_kernel.dylib`__pthread_kill:
-> 0x1882bc388 <+8>: b.lo 0x1882bc3a8 ; <+40>
0x1882bc38c <+12>: pacibsp
0x1882bc390 <+16>: stp x29, x30, [sp, #-0x10]!
0x1882bc394 <+20>: mov x29, sp
```
The problem is that we try to add entries to `received_entries`, which is a stack allocated variable in the Telemetry test.
```
frame #8: 0x0000000100031b08 LLDBCoreTests`lldb_private::TestDestination::receiveEntry(this=<unavailable>, entry=<unavailable>) at TelemetryTest.cpp:39:25 [opt]
36 // Save a copy of the entry for later verification (because the original
37 // entry might have gone out of scope by the time verification is done.
38 if (auto *fake_entry = llvm::dyn_cast<FakeTelemetryInfo>(entry))
-> 39 received_entries->push_back(
40 std::make_unique<FakeTelemetryInfo>(*fake_entry));
41 return llvm::Error::success();
42 }
(lldb) up
frame #9: 0x00000001000fb9b4 LLDBCoreTests`llvm::telemetry::Manager::dispatch(this=<unavailable>, Entry=0x000000016fdfdfa0) at Telemetry.cpp:31:52 [opt]
28
29 Error AllErrs = Error::success();
30 for (auto &Dest : Destinations) {
-> 31 AllErrs = joinErrors(std::move(AllErrs), Dest->receiveEntry(Entry));
32 }
33 return AllErrs;
34 }
(lldb) up
frame #10: 0x0000000100130220 LLDBCoreTests`lldb_private::telemetry::ScopedDispatcher<lldb_private::telemetry::DebuggerInfo>::~ScopedDispatcher(this=0x000000016fdfdf78) at Telemetry.h:144:35 [opt]
141 // The callback will set the remaining fields.
142 m_callback(&m_info);
143 // And then we dispatch.
-> 144 if (llvm::Error er = manager->dispatch(&m_info)) {
145 LLDB_LOG_ERROR(GetLog(LLDBLog::Object), std::move(er),
146 "Failed to dispatch entry of type: {0}", m_info.getKind());
147 }
```
However, this is not running a TelemetryTest, this is happening when running a ProgressEvent test.
```
frame #13: 0x000000010001eda8 LLDBCoreTests`ProgressReportTest::CreateListenerFor(this=0x00006000012e1400, bit=1) at ProgressReportTest.cpp:36:21 [opt]
33 Platform::SetHostPlatform(
34 PlatformRemoteMacOSX::CreateInstance(true, &arch));
35
-> 36 m_debugger_sp = Debugger::CreateInstance();
37
38 // Get the debugger's broadcaster.
39 Broadcaster &broadcaster = m_debugger_sp->GetBroadcaster();
```
I think the problem is that we're suffering from the Telemetry being global. We have a similar issue for things like the progress events and the file system, which is why the tests use `SubsystemRAII` to initialize and deinitialize the subsystem. I think we'll need to do the same for Telemetry.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJyUWF1zqzgS_TXKS1dcQvgDHvxA_JGb3czeqThTO28uAW2jCUaMJJx4H_a3b7WAGNv3bmaoVMWWWqdb6tNHjaW1al8hztnkgQmhdeWOWjMh2GR5JxtXaDP_xxKPpcJ9gQbvUp2f5k-QyQoM1kbnTYbgCoTMSFtAqTNZlid4V65gYcK4_5vy7o8nbCVYvGTJGsoyT8FpXVom1vSFiXVTKefQOhpaaINMrJ-flw_08dUP84SJqDWOwUmzRweZQekQmBB_F00IxpNFYwxWDvADs8bJtESw6MBpYGLGxPo3i4YQ_tCVbMGPBybWaaPK_N5IJtZ_2-0MmIikOUzHTMSjy01hdYTH19Xmdbv59tt6_bxi4TL4mcnr99fkebv5lrwsN2Q3-zlW8rLcPv1rufqd7MJbO8aT9jxHWB3vj9JYCjJXmVO6kuYEegfWGVXtLS1h4ZLxBH4ODz_cBfy_wIc0OQdnmsoPJOAKgzIHJsKAiQX82WCDFAglKtOHkazrEkcHqar71tQncAHW6RoMSqsrb06UlyVsnh6Th5dXHxXAzsgDkSjkLEyAf_D2CaJIpFkYRVCq1J6sw8P2DU2F5Sg_lSplU77d1q277ZsqS2DiASLGk79o31bJPQtXAPzj7I6FCyYeIhauKB5IR6WGgYWMKGgWPnSGY06W7VbOMFk3G4gOp5aZSm19bRjz3nDaGVpXk8WHiOkEP0JO_9jkwdb-gwjv-UfA2WTJRHCDNu7QBO_QDvo4QPP-L7LNk9cCoTY6LfEAyoIrpIN3BGdOVIkyzwErZxRaX5hTbjBDdcR82w0TkFjAe6GyggAkWCezN5AlSZLDHI7SKF_dqvKC9YolHtA7QOtGcKtVn5SILinBOQ-DlEdwWdZTTpTd1kYdpUPKa5jQzBKtU5WkOmoHu9hXlTMnJiJXKEvlFC6aSh6lKilKOjix8Js-_XgyBunOmyBHo6yuWZiEMQsTMaFs6dpRinx-wim0DxNrJtawkUcECZmufW3TkXhvsNMGSunQwBGN2qnMh05qkGImG9vqvTZqrypZduCzS_AW6aD2hYOCHO11haAb52Uk0zVCevI4Th3w0pGykOsKRx1y1CGrnVfNxgtzspNvuG29UEl7UfaHm5-qbSatY-FiLd_w84Ceqp325xa1Z0pUjPvKC2Pon2ti0Xzd2GKbyuyNiaiNasxh-FiXt94PFFZTqT8b_HkAF-F3gYQPHXDwGYdrTDXY2MoYbdqPtskytNZDDZaKNgOz5aWANvWQy_ENl3dpnI5_wOXeset30H79RVZyj10kubK1dFnxBY1XHY3Pfqe7fJfvJL_mcc_hgIXJRFxzuD9-0ebLHwkkZbkydF2FS_jykMI2ccTxM5umVKJABzOo1faamz18cqTPzNDfH1pV3if5ObNAH5GJqDNkreoRNAFdVf_qByQIh5mk7-GQEj3sp_X466wH_DrtQciF4H9Bwq7Sv6HizZdd3okHiy_XLDFt9ns0fQn4wf_eIH1y6Joms-iGJtRdBuMxUeVG6YK-iDoxoruF2lKqYHinO9o3eAWCQeoWVLWHncIyt6MeoE0AHLb9Ok-j6WGraAuDVAXj8MJXUuWEXNHl1RfHqKdQMB4PteyqtgGN59ShLTBaMSivC--fzPQRTHoZomRun78_blcvL99fmIge0T3rPRMRzdAn7-17-gdmrqPlNWkpDzTRg0_hxw8TYi1ViTldyH2cne7TdXKqiQsUJiduCkHO2h2M9uj-qaq8K82L0-zukY7Olz3CN_2OR4pvAUQUuigq7ahB9CmUl7fh0KyQdY3e6J1yc17xq9F7g9aujvQK8GUjEIQ36hlgLm87gR73BWttnA_HH_LCv6s8K-uwQrPWN6SfelyBwZj7hiZVzrfOLf9vYXu9nNKdH9zc-R054ddSup02Hd026L5p6z4He1kNx4ME97MveNAOf5HZ983vw008VdbJKiPOONNg2xZOpSG2XqrZ5FNCezIdtnknCVtbe9L3EvETDxd4s6vOoCu9x66oe2gmZhZSo2VO_QCavqHo7_qH8xRFng6_UhkOY6TwH9ENlgyDuuLpE_GuevPB3Pa0TMwMgm12OzReeYw-XDWkKdLEvtSpLEfwb2xbKAlWHVQpDShrG_R3GDnaWyjVG_buPEEAidAWZCtHsFP0WutfRy7a5Pei68KIt0C9HZvyTdO9ubwkT09syqnCVaWckqX6D3rMHAcDBGD7NSPot--3WpZQYScSurWkWqLYz2IOd_k8zOMwlnc4D2bjIIjjMBZ3xTyQs2kQjNMUw4nYBfE0mnKRjyeYzdJc8NmdmgsuJjzkkyAS8USM4jwOQs5TzNOdDOMJG3MS-XJEajvSZn_nT28eiDgO-F0pUyxt9_NHhe_t2XY_gJg5LbpPm71lY14q6-wZxilX4vyi8EGa7ocQyl_fLevdeat3jSnnhXO1JaJ73u6VK5p0lOnD-ccF77Y2utXptY_JMrHugj7Oxf8CAAD__8zmUAQ">