Skip to content

Instantly share code, notes, and snippets.

@bstaletic
Last active May 18, 2021 09:15
Show Gist options
  • Save bstaletic/7881bb3b40d5d0149f936f6857a7fa7a to your computer and use it in GitHub Desktop.
Save bstaletic/7881bb3b40d5d0149f936f6857a7fa7a to your computer and use it in GitHub Desktop.
Clangd segfault investigation
Content-Length: 1232
{"id":1,"jsonrpc":"2.0","method":"initialize","params":{"capabilities":{"textDocument":{"codeAction":{"codeActionLiteralSupport":{"codeActionKind":{"valueSet":["","quickfix","refactor","refactor.extract","refactor.inline","refactor.rewrite","source","source.organizeImports"]}}},"completion":{"completionItem":{"documentationFormat":["plaintext","markdown"]},"completionItemKind":{"valueSet":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25]}},"documentSymbol":{"hierarchicalDocumentSymbolSupport":false,"labelSupport":false,"symbolKind":{"valueSet":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26]}},"hover":{"contentFormat":["plaintext","markdown"]},"signatureHelp":{"signatureInformation":{"documentationFormat":["plaintext","markdown"],"parameterInformation":{"labelOffsetSupport":true}}},"synchronization":{"didSave":true}},"workspace":{"applyEdit":true,"didChangeWatchedFiles":{"dynamicRegistration":true},"symbol":{"symbolKind":{"valueSet":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26]}},"workspaceEdit":{"documentChanges":true}}},"initializationOptions":{},"processId":5498,"rootPath":"/home/bstaletic/work/test","rootUri":"file:///home/bstaletic/work/test"}}Content-Length: 52
{"jsonrpc":"2.0","method":"initialized","params":{}}Content-Length: 169
{"jsonrpc":"2.0","method":"textDocument/didOpen","params":{"textDocument":{"languageId":"cpp","text":"\n","uri":"file:///home/bstaletic/work/test/foo.cpp","version":1}}}
  1. touch foo.cpp compile_flags.txt
  2. mkfifo clangd_in clangd_out
  3. Have three terminal windows open
  4. In first do tail -f clangd_out, to stop clangd from blocking.
  5. In second do /path/to/clangd <clangd_in 1>clangd_out
  6. In third do cat data > clangd_in
  7. profit THE HORROR!
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment