Vscode-cpptools: Linux์—์„œ Clang ๋ฐ LLDB์— ๋Œ€ํ•œ ๊ณต์‹ ์ง€์›

์— ๋งŒ๋“  2020๋…„ 05์›” 06์ผ  ยท  13์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: microsoft/vscode-cpptools

ํ˜„์žฌ Linux์—์„œ VS Code ์šฉ LLDB ์ง€์›์ด ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค. ๋ถ„๋ช…ํžˆ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

vscode-cpptools๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Linux์—์„œ Clang์„ ์‹œ์ž‘ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๊ณต์‹ ๋ฌธ์„œ๋Š” ์—†์Šต๋‹ˆ๋‹ค.

Linux์—์„œ Clang / LLDB์— ๋Œ€ํ•œ ๊ณต์‹ ์ง€์›์„ ์ถ”๊ฐ€ํ•˜๋ฉด ์ •๋ง ๋ฉ‹์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค. LLVM์˜ ํฌ๋กœ์Šค ํ”Œ๋žซํผ ํŠน์„ฑ ๋•๋ถ„์— Windows๋กœ ํ™•์žฅํ•˜๋Š” ๊ฒƒ๋„ ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Feature Request debugger docs

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์ข‹์•„, ๋‹ค์‹œ ํ•œ ๋ฒˆ ํ…Œ์ŠคํŠธํ–ˆ๊ณ  Ubuntu 18.04์—์„œ ์ž‘๋™ํ•˜๋„๋กํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. apt ๋ฅผ ํ†ตํ•ด ๋‹ค์Œ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.
sudo apt install clang-10 llvm-10-dev liblldb-10-dev
  1. ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์‹คํ–‰ ํŒŒ์ผ์— ๋Œ€ํ•œ ์†Œํ”„ํŠธ ๋งํฌ ์ƒ์„ฑ
sudo ln -s /usr/bin/clang-10 /usr/bin/clang
sudo ln -s /usr/bin/clang++-10 /usr/bin/clang++
sudo ln -s /usr/bin/lldb-10 /usr/bin/lldb
# This one is a bit strange but VSCode only looks for the name `lldb-server-10.0.0` but not `lldb-server-10`
sudo ln -s /usr/bin/lldb-server-10 /usr/bin/lldb-server-10.0.0
  1. ์†Œ์Šค์—์„œ lldb-mi ์‹คํ–‰ ํŒŒ์ผ ๋นŒ๋“œ
git clone https://github.com/lldb-tools/lldb-mi.git
cd lldb-mi
cmake .
cmake --build .
sudo cp src/lldb-mi /usr/bin/

์ด๊ฒƒ๋“ค์ด๋˜์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์—ฌ๊ธฐ ๋‚ด launch.json ์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ clang++ ์‚ฌ์ „ ์„ค์ •์˜ ๊ธฐ๋ณธ ์„ค์ •์ด๋ฉฐ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ธฐ์–ตํ•˜๋ฉด ์•„๋ฌด๊ฒƒ๋„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "clang++ - Build and debug active file",
            "type": "cppdbg",
            "request": "launch",
            "program": "${fileDirname}/${fileBasenameNoExtension}",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "lldb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "C/C++: clang++ build active file",
            "miDebuggerPath": "/usr/bin/lldb-mi"
        }
    ]
}

@WardenGnaw ์‹œ๋„ํ•ด ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  13 ๋Œ“๊ธ€

์˜ˆ, https://code.visualstudio.com/docs/cpp/config-clang-mac (Mac ์ฐธ์กฐ๊ฐ€ Linux๋กœ ๋ณ€๊ฒฝ๋จ) ๋ฐ https://code.visualstudio.com/docs/ ์˜ ์ฝค๋ณด๊ฐ€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. @WardenGnaw ๊ฐ€ ์•Œ ๊ฒƒ์ž…๋‹ˆ๋‹ค).

LLDB ๋””๋ฒ„๊น…์ด Linux์—์„œ ์ž‘๋™ํ•˜๋ ค๋ฉด lldb-mi ์‹คํ–‰ ํŒŒ์ผ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ launch.json ๊ตฌ์„ฑ์„ ๋‹ค์Œ์œผ๋กœ ์ˆ˜์ •ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

{
...
"miDebuggerPath": "path/to/lldb-mi".
"miMode": ''lldb"
}

@ sean-mcmanus์—๊ฒŒ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š” @WardenGnaw , ์ด์ „์— ๋งˆ๊ฐ ๋œ ํ‹ฐ์ผ“์—์„œ ์–ธ๊ธ‰ ํ•œ ๊ฒƒ์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ๋‚ด ์ปดํ“จํ„ฐ์—์„œ ๊ทธ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

/usr/bin/ ์—์„œ lldb-mi ํŒŒ์ผ์„ ์ฐพ์•˜์ง€๋งŒ "miDebuggerPath": "usr/bin/lldb-mi" ์‚ฌ์šฉํ•˜์—ฌ ๋Œ€์ƒ์„ ์ง€์ •ํ•  ๋•Œ ์ž‘๋™ํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. lldb-mi-10 ๋ฅผ) ์ฐพ์„ ์ˆ˜ ์—†๋‹ค๋Š” ์ ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

๋ฒจ์ด ์šธ๋ฆฌ๋‚˜์š”?

์˜ค, ์šฐ๋ถ„ํˆฌ ์ชฝ์˜ ๋ฒ„๊ทธ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค https://bugs.launchpad.net/ubuntu/+source/llvm-toolchain-10/+bug/1872387

์šฐ๋ถ„ํˆฌ 20.04์€ ํŒจํ‚ค์ง€ ์žŠ์–ด ๋ฒ„๋ฆฐ ๊ฒƒ ๋•Œ๋ฌธ์— lldb-mi-10 ์™€ lldb ๋‚ด๊ฐ€ ์‚ฌ์šฉ ์‹œ๋„ "miDebuggerPath": "usr/bin/lldb-mi-9" ์„ค์น˜ ํ•œ ํ›„ lldb-9 ํ•˜์ง€๋งŒ ์•„๋ฌด ์†Œ์šฉ์—.

@WardenGnaw "miDebuggerPath": "usr/bin/lldb-mi-9" ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๋””๋ฒ„๊น…์ด ์ž‘๋™ํ•˜๋ ค๋ฉด ๊ตฌ์ฒด์ ์œผ๋กœ "miDebuggerPath": "usr/bin/lldb-mi" ์ด์–ด์•ผํ•ฉ๋‹ˆ๊นŒ?

ํŠน๋ณ„ํžˆ "usr / bin / lldb-mi"์ผ ํ•„์š”๋Š” ์—†์œผ๋ฉฐ mi ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์œ ํšจํ•œ ๋””๋ฒ„๊ฑฐ๋ฅผ ๊ฐ€๋ฆฌ์ผœ ์•ผํ•ฉ๋‹ˆ๋‹ค.

ํ…Œ์ŠคํŠธํ•˜๋Š” ํ•œ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์€ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  -interpreter-exec console "version" ์‘๋‹ตํ•˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@WardenGnaw ์šฐ๋ถ„ํˆฌ์—์„œ lldb-mi๊ฐ€ ๋” ์ด์ƒ ์ง€์› ๋  ๊ฒƒ ๊ฐ™์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

https://bugs.launchpad.net/ubuntu/+source/llvm-toolchain-10/+bug/1872387

์ด์— ๋Œ€ํ•œ ํ•ด๊ฒฐ์ฑ…์ด ์žˆ์Šต๋‹ˆ๊นŒ? VS Code์™€ ํ•จ๊ป˜ lldb๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ •๋ง ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ๋กœ์„œ๋Š” VS Code์™€ ํ•จ๊ป˜ ์ด์ „ ๋ฒ„์ „์˜ lldb๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ ๊ตญํ•œ๋˜์–ด ์žˆ์œผ๋ฉฐ, ๋ถ„๋ช…ํžˆ lldb-mi-9๊ฐ€ VS Code๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Ubuntu 20.04์—์„œ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜๋„๋ก ํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

macOS์˜ ๊ฒฝ์šฐ LLDB-MI๋ฅผ ๋นŒ๋“œ ํ•˜๊ณ  ํ™•์žฅ์„์œ„ํ•œ ์ž์ฒด ์‚ฌ๋ณธ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์šฐ๋ฆฌ๋Š” XCode์˜ lldb.framework๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ ๋ฒ„์ „์ด์žˆ์„ ๋•Œ๋งˆ๋‹ค lldb๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ๊ฑฑ์ •ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

ํ•œ ๊ฐ€์ง€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ์ž์ฒด ๋ณต์‚ฌ๋ณธ์„ ๋นŒ๋“œํ•˜๊ณ  miDebuggerPath ์‹œ์ž‘ ๊ตฌ์„ฑ์„ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. Linux์—์„œ ์‚ฌ๋ณธ์„ ๋นŒ๋“œํ•˜๋Š” ๊ฒƒ์ด ํ™•์žฅ๊ณผ ํ•จ๊ป˜ ์„ค์น˜๋œ lldb์—์„œ ์ž‘๋™ํ•˜๋Š”์ง€ ์กฐ์‚ฌ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์—…๋ฐ์ดํŠธ : ๋ฐฉ๊ธˆ Ubuntu 20.04 ์šฉ lldb-mi ๋นŒ๋“œ๋ฅผ ์–ป์—ˆ์ง€๋งŒ ๋งŽ์€ ๋Ÿฐํƒ€์ž„ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด ๋นŒ๋“œ๋Š” liblldb.so ๋ฐ lldb-server๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๊ธฐ๊ณ„์— ๋Œ€ํ•œ ์š”๊ตฌ ์‚ฌํ•ญ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์•„์•ผํ•ฉ๋‹ˆ๋‹ค.

  • ๊ทธ ์†Œ๋ฆฌ
  • libpython2.7
  • libncurses5

_ ์•„์ง ์กฐ์‚ฌ ์ค‘ _

Linux (Ubuntu 20.04)์˜ vscode์—์„œ clang์„ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•  ๋•Œ๋„ ๋น„์Šทํ•œ ์ƒํ™ฉ์„ ๋งŒ๋‚ฌ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  miDebuggerPath๊ฐ€ ์ž˜๋ชป๋œ ๊ฒฝ๋กœ๋ผ๊ณ  ์•Œ๋ ค์ค๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์‹ค์ œ๋กœ ๋ฒ„๊ทธ์ž…๋‹ˆ๊นŒ?

@zbhxlj llvm ๊ทธ๋ฃน์€ llvm-toolchain-10์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” lldb-mi ํ•˜์ง€ ์•Š๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

clang ๋ฐ lldb๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์‚ฌ์šฉ์ž๊ฐ€ ์†Œ์Šค์—์„œ lldb-mi ๋ฅผ ๋นŒ๋“œํ•˜๊ณ  miDebuggerPath ์—์„œ ๋นŒ๋“œ ๋œ lldb-mi ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ๊ฐ€๋ฆฌ์ผœ ์•ผํ•ฉ๋‹ˆ๋‹ค.

@WardenGnaw ๋Š” ํŒŒ์ด์ฌ์ด๋‚˜ ์ €์ฃผ์—†์ด ์ปดํŒŒ์ผ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ตœ์†Œ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•˜๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

clang์— ๊ด€ํ•ด์„œ๋Š” LLDB-MI์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด clang์ด ์กด์žฌํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋Š” ๊ฒƒ์ด ๋ถ€๋‹นํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ข‹์•„, ๋‹ค์‹œ ํ•œ ๋ฒˆ ํ…Œ์ŠคํŠธํ–ˆ๊ณ  Ubuntu 18.04์—์„œ ์ž‘๋™ํ•˜๋„๋กํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. apt ๋ฅผ ํ†ตํ•ด ๋‹ค์Œ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.
sudo apt install clang-10 llvm-10-dev liblldb-10-dev
  1. ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์‹คํ–‰ ํŒŒ์ผ์— ๋Œ€ํ•œ ์†Œํ”„ํŠธ ๋งํฌ ์ƒ์„ฑ
sudo ln -s /usr/bin/clang-10 /usr/bin/clang
sudo ln -s /usr/bin/clang++-10 /usr/bin/clang++
sudo ln -s /usr/bin/lldb-10 /usr/bin/lldb
# This one is a bit strange but VSCode only looks for the name `lldb-server-10.0.0` but not `lldb-server-10`
sudo ln -s /usr/bin/lldb-server-10 /usr/bin/lldb-server-10.0.0
  1. ์†Œ์Šค์—์„œ lldb-mi ์‹คํ–‰ ํŒŒ์ผ ๋นŒ๋“œ
git clone https://github.com/lldb-tools/lldb-mi.git
cd lldb-mi
cmake .
cmake --build .
sudo cp src/lldb-mi /usr/bin/

์ด๊ฒƒ๋“ค์ด๋˜์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์—ฌ๊ธฐ ๋‚ด launch.json ์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ clang++ ์‚ฌ์ „ ์„ค์ •์˜ ๊ธฐ๋ณธ ์„ค์ •์ด๋ฉฐ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ธฐ์–ตํ•˜๋ฉด ์•„๋ฌด๊ฒƒ๋„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "clang++ - Build and debug active file",
            "type": "cppdbg",
            "request": "launch",
            "program": "${fileDirname}/${fileBasenameNoExtension}",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "lldb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "C/C++: clang++ build active file",
            "miDebuggerPath": "/usr/bin/lldb-mi"
        }
    ]
}

@WardenGnaw ์‹œ๋„ํ•ด ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰