<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/119784>119784</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[lldb-dap] Invalid variable reference ids
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
Anthony-Eid
</td>
</tr>
</table>
<pre>
# Summary
It seems like lldb-dap reuses variable reference numbers across scopes during the same suspended state. For example, if a client sends two scope requests with different frame_ids, lldb-dap uses the same variable reference numbers for different variables across scopes.
## Example
```json
{
"type": "request",
"seq": 11,
"command": "scopes",
"arguments": {
"frameId": 524289
}
}
{
"type": "request",
"seq": 10,
"command": "scopes",
"arguments": {
"frameId": 524290
}
}
{
"body": {
"scopes": [
{
"expensive": false,
"name": "Locals",
"namedVariables": 1,
"presentationHint": "locals",
"variablesReference": 1
},
{
"expensive": false,
"name": "Globals",
"namedVariables": 0,
"variablesReference": 2
},
{
"expensive": false,
"name": "Registers",
"namedVariables": 3,
"presentationHint": "registers",
"variablesReference": 3
}
]
},
"command": "scopes",
"request_seq": 9,
"seq": 0,
"success": true,
"type": "response"
},
{
"body": {
"scopes": [
{
"expensive": false,
"name": "Locals",
"namedVariables": 0,
"presentationHint": "locals",
"variablesReference": 1
},
{
"expensive": false,
"name": "Globals",
"namedVariables": 0,
"variablesReference": 2
},
{
"expensive": false,
"name": "Registers",
"namedVariables": 3,
"presentationHint": "registers",
"variablesReference": 3
}
]
},
"command": "scopes",
"request_seq": 12,
"seq": 0,
"success": true,
"type": "response"
}
```
This goes against the DAP specifications in regard to the lifetime of object references, because references become invalid before the program exits its suspended state.
## Additional Information
I’m one of the people working on creating a client-side debug adapter implementation for the Zed code editor and noticed this bug occurring when requesting variable information. This is preventing Zed from getting valid variable information during debugging. I used the below simple program to get the above log message
compiled with `gcc -g3 -o main.out`
```c
int main() {
int x = 1;
return x; // Breakpoint on this line to trigger a stop event
}
```
I installed lldb-dap through Pacman on Arch Linux and am using lldb version 18.1.18.
## Log files
[vscode-lldb-dap-logs.txt](https://github.com/user-attachments/files/18118198/vscode-lldb-dap-logs.txt)
[zed-lldb-dap-logs.txt](https://github.com/user-attachments/files/18118199/zed-lldb-dap-logs.txt)
Please let me know if there's additional information I could provide to help fix this. I'll also be willing to collaborate with someone to come up with a patch, but I don't have any exposure to the code base so I would really appreciate help.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzsV8GO47gR_Rr6UrAhUfbYOvjgXo8TA3MYbIIccllQZEniDkVqWZTtztcHpCzb09vd2EG2DwEWUKMtslj1qviKehREurGIW7Z6Yqv9TAyhdX67s6F19nn-WatZ5dTzlvEC_jF0nfDPLNuxbHcMQIgdgdHfEIxR1VyJHjwOhAQn4bWoDILHGj1aiWCHrkJPIKR3REDS9UigBq9tA6FFINEh0EA9WoUKKIiACzg4D3gRXW-Q8Z9A1yBAGo02xreKIJzd6Aw8_jYgBYKzDi0oXafQAWovOvxFK4oObkgTzlvcdwDXzj84mwxfJLKAsSyMF7FUn0fE0-CnbHx-JWfj-_qJZTsAxnl47pFxzopdfLtmEAf4T5MJ4W9Xizx_GJau64RV98UjkO_XCt8MHdpAk9k1cppMdTlOHlZ8yTfluHC9Tyj3_wvW7IOxltl7WCNpX_NzDxxnVtMMPFhdLfHSoyV9mlKuhSGc4N6srOgeavLFSWEe0_rOTv1r4s5Uo9-Z9R4JbRBBO_t3bcPdtXnT9Y2RP0_Uvbm_J7d_XPan5Po346ofSTb748D5hwL_GRtNAf0fh178wD7597y_mXHxXcZXtq72N4b_YCtde_OXezuWrzbpY4_SICXSlHLwAz5Mvmx96p2lNDL2XrL8f2u_3zPyr_b7q_0-pP3y1z-Sf1r_PWiMUXL8s9UEjYsypRHaUkhSZ7_7CtSj1LWWqXgE2oLHRngFwSUbo2sMukNwNbjqV5ThromSgqpQioEelBLFIdchaHsSRiuosHYek7feu8aLDvCiA0H8e6nwrhLpJp12SukITRg42tr5LgG9Kqkj-8zZJmNl2YGzCWOKgi6qrbPz36KadBakRxHi70ktzkkrBIXV0IBQog_oQUeN1k1ESkIvevs3KpBOIaDSwXkQVoF1QUtUEGJdow8n5eCTdj23aCftGd9vUlLf4S8gbYgm6D2e0CbDGKf2roMGw3VlrN5r6yednPA32jYLOEYFqxLgCo07A6V0bhUPLvpN86JyJwTjGuiQSDQ4FlO6rtcG1aiX2aeskRLmTQFzB53QduGGcCPUjV-SZTttQ7JgfMN4eT0Xrn0T5y7Aij3krHgY9xgGb-HCiidg_MD4AZ48im-9iyucHUtrtMXERK-bBj0IoOB6SDV7i-tHiAQXJqZyk_eh9W5oWvgqZCds9L_zsoUv2g6XtKOig4FiTeMSOKGnWOd8s8gX-eaFnP_iGqh1PJGyHVs9nSjSYz7FmhvX0CJcQjwy-KYNoSdW7MYkGx3aoVpI1zF-GAj9XIQgZHtVuofRLT_kmzzf5OWG8cOb7nk5xv8Pqg8JXjJ-eN33GDk9Xw0KQjAYoEP4Zt05XspCix4ZXxOIe_8-EvgI0g1GRXqeYicGBy2aHmp9STu_gCPja2NAGHJQIZy1Melq6EA6Y0TlvAg4cpVch24kSjp4hn4cF9CLINt0Sg0BjqCcZXwdoBUnBGGfAS-9o8HjdNqlPq9iQuTgCOeE0aMw5hlE33uUOkaNUBMnZmpbqLIoxQy3-bpYZsuCF-Ws3VabarNUFdYSxUZmFUr8pLDiVV2WApdiprc848uc55zzZVaUi_Wn9RJxk9frTNUrztkyw05oszDm1C2cb2aaaMBtnpfrzXJmRIWG0j2dc4tnSLPxE7Daz_w2LppXQ0NsmRlNge5ugg4mXfCnfWWrPRzti9PmfvHVimaDN9t3uBR9X__Ne-_iV4LxQ0KU-DRCPm35fwMAAP__wYbTqw">