microsoft / microsoft/vscode-cpptools
Debugger fails under Linux if file size limits are in effect
Nessuno ha ancora preso questa issue.
- Lingua principale
- TypeScript
- Stelle
- 6.2k
- Fork
- 1.7k
- Merge medio
- 14h 46m
- PR unite (30g)
- 61
Descrizione
Environment
- OS and version: AlmaLinux 8.10
- VS Code: 1.102.1 (and earlier)
- C/C++ extension: ms-vscode.cpptools-1.23.5-linux-x64 and later
- OS and version of remote machine (if applicable):
- GDB / LLDB version: gdb-8.2-20.el8.x86_64
Bug Summary and Steps to Reproduce
Bug Summary:
LIke many sites, we set a default file size ulimit to prevent users' runaway processes from consuming unlimited disk resources. When attempting to debug a C program with any file size limit less than 2TiB in place (cf. "grep 'Max file size' /proc/$$/limits"), the debugger crashes.
Steps to reproduce:
- Set a reasonable file size limit (e.g., "ulimit -f 25165824" from bash)
- Launch "code" from the shell prompt
- Open a .c file, build it, and set a breakpoint
- Select Run -> Start debugging
The debugger controls will appear briefly and disappear; the OpenDebugAD7 process will crash with SIGXFSZ.
Debugger Configurations
Default settings.
Debugger Logs
No messages in Debug Console or Output windows.
Other Extensions
No response
Additional Information
Attaching a system call tracer reveals that the process is attempting to truncate the file returned from a memfd_create("doublemapper") call to 2TB:
1354933 memfd_create("doublemapper", MFD_CLOEXEC) = 8
1354933 ftruncate(8, 2199023255552) = -1 EFBIG (File too large)
This may have the same root cause as https://github.com/microsoft/vscode/issues/251037 .
Setting "C_Cpp_Runner.debuggerPath": "lldb" in settings.json may work around the issue (OpenDebugAD7 does not appear to run in this configuration), but this is not the default configuration.
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Riproduci il crash con l’ulimit indicato e traccia il processo OpenDebugAD7, concentrandoti sulla chiamata memfd_create("doublemapper") e sulla chiamata ftruncate mostrate nel report. Confronta il percorso predefinito del debugger con il workaround documentato per LLDB; il lavoro è completato quando è possibile avviare una sessione di debug C con un limite sulla dimensione dei file senza SIGXFSZ né la scomparsa del debugger.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- c, linux, vscode
- Ambito
- devtools, operating-systems
- Tipo di issue
- Bug
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Stato di attività
- Ferma
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 35/100