From 18bebcc3bee7eb75f92896210eca68b4b2094426 Mon Sep 17 00:00:00 2001 From: Andreas Heissenberger Date: Fri, 4 Jun 2021 16:55:22 +0200 Subject: [PATCH] docs: add info on how to setup VSCode for debugging V code (#10329) --- doc/docs.md | 28 +++++++++-- doc/img/vscode-debugger.png | Bin 0 -> 7284 bytes doc/vscode.md | 90 ++++++++++++++++++++++++++++++++++++ 3 files changed, 115 insertions(+), 3 deletions(-) create mode 100644 doc/img/vscode-debugger.png create mode 100644 doc/vscode.md diff --git a/doc/docs.md b/doc/docs.md index 4a0b1e8d06..3735f8547c 100644 --- a/doc/docs.md +++ b/doc/docs.md @@ -129,7 +129,7 @@ For more details and troubleshooting, please visit the [vab GitHub repository](h * [Structs with reference fields](#structs-with-reference-fields) * [sizeof and __offsetof](#sizeof-and-__offsetof) * [Calling C from V](#calling-c-from-v) - * [Debugging generated C code](#debugging-generated-c-code) + * [Debugging](#debugging) * [Conditional compilation](#conditional-compilation) * [Compile time pseudo variables](#compile-time-pseudo-variables) * [Compile-time reflection](#compile-time-reflection) @@ -3825,9 +3825,11 @@ re-creating the original structure exactly. Alternatively, you may [embed](#embedded-structs) the sub-data-structures to maintain a parallel code structure. -## Debugging generated C code +## Debugging -To debug issues in the generated C code, you can pass these flags: +### C Backend binaries (Default) + +To debug issues in the generated binary (flag: `-b c`), you can pass these flags: - `-g` - produces a less optimized executable with more debug information in it. V will enforce line numbers from the .v files in the stacktraces, that the @@ -3860,6 +3862,26 @@ for example `main`, you can use: `-printfn main -o file.c`. To see a detailed list of all flags that V supports, use `v help`, `v help build` and `v help build-c`. +**Commandline Debugging** + +1. compile your binary with debugging info `v -g hello.v` +2. debug with [lldb](https://lldb.llvm.org) or [GDB](https://www.gnu.org/software/gdb/) e.g. `lldb hello` + +Troubleshooting (debugging) executables [created with V in GDB](https://github.com/vlang/v/wiki/Troubleshooting-(debugging)-executables-created-with-V-in-GDB) + +**Visual debugging Setup:** +* [Visual Studio Code](vscode.md) + +### Native Backend binaries + +Currently there is no debugging support for binaries created by the native backend (flag: `-b native`). + +### Javascript Backend + +There is currently no support for source maps for Javascript output create by the JS Backend (flag: `-b js`). + + + ## Conditional compilation ### Compile time code diff --git a/doc/img/vscode-debugger.png b/doc/img/vscode-debugger.png new file mode 100644 index 0000000000000000000000000000000000000000..ff3b7996cdba9cc0743e8665ddd2d4b51aca532e GIT binary patch literal 7284 zcmYLuc_5V0*ZED#8U&B##C90H*Q zArKmRCOT>l)a1MmzNCC0rZi2?fhTLEaW~B<#QpoJ?sXR+35^NDIXOeR@d39*uP*F#g81-l>Ff z-Yw+Zizf&=5A(>hprKsNW>Aiqqfqc##Z9p_b5JCLYBlkD{Q6?T-}S}zdRy!2vB{#+ z6u$bw)`B1buFQ;yS8(XEg84g_5Atxozu_Y%hRDFN2UaEOQRO_pzDM)t&k1l_={2RC z8gbsMs&IZ-PK=4}Jqjkn{*tVqypeQZhYgrgEr_iC>dgA}7WPnrCpAk*kE_63$hX`C z7r{=6{3<1Is$9yA4_myz*nd=SMcB{FQI- zaUFe)HJgBM(7xNg*h%x-O!`cYegaJAv${)?xTqqwAPgqC zUlaG(^fLV-xKeXjGlh9HB%*{U?`^Sl?@3~D7L56eg_5aLx9Ufy+LjDibH@xcNtTD8 zfSHbb3!AMR2`No<9yzB!iJLRh=7p?F^NEY8gqLHJx^t~kJ**J05J~Y5x!k_TCj5JG zxQV`TZkhn$w0>MKFDT$_MMyj!yVTCo#pac8^}9$yVnl+@%d<>)j?xC*z@k_Mg#?9= zR4HPDkTCT(#2QQEzXgo1v5#)$ZH9rdj#p8VQe;>tB!|y1kGIqX znu#-%d4237HDq^V>7j(GPUsIdfNE4YZZ8%lWwAu|4oxx^^^u1k+YD)awcZT)iN0C=T}Jp_zK-Qg(i54AX1v!(uhRTXWY#R zft%IReK-?QTM?Nqn3-a{1PSZ<%=f#oTpqe}CUdbD+Muj!?c^mc z*J9$1<|lI6#MaTxy4)< zuO5$OR6ViTiU9*+p*OTcJCAZ6Y&CE=Xp#hXJI+6SDtL!sww~y$&QZ>T{P|-h_^<#o z@#p?gAangT${_ecc+DxWE-{zFRT%115e0g$?&G+fi%FJ$%9)HS2xg8w#e@NdG=r`obe*J$$m-DBXCCqQ10Bvxr0U zjQH5cTtQn`e^v&s`5oD(4qjQF8Y|}r1zqit!S)nT&RXv<8EL(xh0~(?eB7$~mGnU{ zPHPZKDIoTaZV#~TTTHz;HGd#6aCighv9(kreOm%Nx5z}T6~RJB>tQNV*;7`Ra8Ro97kfYS2Nd}`bJRY?bdjG1Q1_{Gwq)3QwazE?R(y6=Hc}Ti0~fU72-PJk?#Nj`jP8n; z|N8|8Q2&h)&!rUEC0wV8g2jhkp^uvTs;=ge4udD&t3Jb)BcYJ-{NY+op~ht@>Kf@@ zhO5gT_uW@R8K60($ZwY#eRZ^Nh`wM_VpU58XwEYmLPukBInvQ0fHMroDVDz87d)aB zBleX(86Hr?!<*oUO(;+s)BhnVU6qZ2iY4=zwtehN2@JPQKq(vZ>lmq(LUXE(Z&x^) zS-YIc^mf#Xu7*FGMd~*|%G$1L>oU%E5Hlkm;+kK~K7{F$7&UI~`8*Wi(B&NQ^QPy* z!w>Y@YIeDE!AvEWc6o#HLc4qN~vPn2R%m)g$H9AfR|1!1z3(WO1QY{KoK61){r2fiX0 z4tHBFJ8O)I{wf9b5ghFTjwx6z5qbxEIzMBP?fV)P3O>k(B!fggNti?in%mHc;dgg- zYi4&>+~!y1TOtg@Fdjp%Q_QuBMVc;9rwa+jO-FdP4bR7iPW{~q?Rm}f+m9umo3!P+ zvNnr%E?j-iq1JF}f?LE?KC(M*WUm^Iy_DZas>!E~)2+c)N(jiLkEu58)W~tB|M8dB zh-rnp2@P^qpD_p_SoOfuIv(?EVPm>EyQ4@-^^9AFn*#xNLjzfVfK`y*um!>bDa@f0EY5*-L@U&em=nLuWxOOk7j- z^MIX!lGuB>e)VZzy!L~oCt#z>e6!D&{)zE^`_q%rt#lXawSw;6)NI?ntfKhz68=KH ze+HZqmX=3PW^(cc)Xp^{UM-o;A0r)^#5b3y!r zDgJ|b;d^#f^X1Pn%M000p!oO3vR;vq4%KeZqJwql3}ZC?4mh(0-4ow7_{pKhHZD*C z&(RE$_1OB>kiPI2aBrbKall93SYwcGNL#Q6B;&#E+9a^MCwA`D^%b*k@;{@FG+$56 zBWthNN?DicN)0uGs;G6x`i(0!Nz%6(;?YXAP>u$}d#5ik1xdao$@OG@W9dWdK{E|S zl<*qvIP@>3ZgEk!=?EEX)QOE_!pcnBOK&{)GCp$s#y#CSPd}q!ktbv(@X-Yd7W(O` z8f(@AwdaBzFcN2Z$nC9D_`6#=%_19KWW%7J0%n|M&iC5DN1mTEnKNI!^Tj{WzfQy; zyOYP#E%`WfiFw1s?FrS8x8NZ2%7s4m3n_q6iI=B!`!nODCw}ebzhiG+3JLrZj_6TJ z#vnLTpXk*gXysNc@gnB^OZCa?EW2Jm>E71Ua{7a3&-MG+WXiq2g@+^;5rGcA^P#(9xRCldIH6I>8;A6f}NKs)+E6)P_O5)}B1mK}>}0uxgU!N_r94o53vfi+WV zmXzD%V#Q}--&D$OKWX`n(#-z(DDpyLa?gD~tYwdhN9M=Y&oR>4*6iPKNrX%ONKpat z9t_gGGBw(N6^NZ#(P-B-e>OcJ!y>+4Zkw45AItI?<7L|;EfI4WuDCGyCC?5Nn<(4% z%itISX8`w}X82c!A9Ov#+8&;z4anu$LJ-Cr!A&lBaMX8>faG{&E9Gm4TZ0tjh)F;W5Gh;mLXb!tJp zfj4KTOGq$0RNMP1`i|+A=Mn(@8an34(e&(Ns5E=kec=vRo#_gb)NsFo3jr9CA?J81RAEijQLV z?vSA{uRG&sZDfQ{`Oa?MKto=>?%VlDWdAQ}a0h+>G}*eBSn6-BjPtVO)+F7^0;dAj zAOTDP`nxf;*yB4&hf$NoEp5d3D}v8~&=&h=wJGR?v%(YyEYxA(O;dDBhBq0T1uO>X z*pc-x6m^*m^~VhCsnO5EV_pvu9Rst*r4cUm`m$#=$v;-QHTy%-Pe{6!n!ZV`1yD%7vJ>dMuX_Tmz`d;!N0~c?0V!#MDCZQM(%C$PX z5eJVz`|JtU*{mF>%*J%lrDOuH`0(qYZNK8o%WaOhzo+Cc6QT0L9*7MILQR;pf_%5CfelXkAlJKK(;x3p74U*@*S_iSY9Um_MD`zt;-yGZX_v^ZI3sXGv?h`RH5_ zXA6s*iG_kbCWv9`j@@%5vWxK(>90 zVA%`mC3fCKY|QkqIySigzJ>EL#3W;w;2Pt7ZyA9_Z@k8jd#Gxyg1T;tb|kE(i?Igo z)Nw#`>?Z@tsrt$9b+S*x#07J{*QTJhL_`B==*y}Nl?22aJqhfJQOKVeUpn!5fjK+#SUe)-(W>(ZzWmIKh z{IU$JC#NdEsr5Ntw%=B%4A~a2ae7Sse)`=AbIycWtz<33vA78(uH3n(Wb4$lJ8#PX zPyVn!Y=XP;8mpbFX$yjHE7BKJ0r#Qztp-iB>Io|pZy}x-+~%12@7Rn8NfZ(4)Up*E zH1W7fRo-{@fqWWvI#bK@wCd85#e|#WJ1h8G3asaWOWuh4)5IsX|%()&upc?V!9!3N&;aX(@Rv2rqdOFX4j^9-*g+5 ze&s7K@)G_ghHy;ETL4ZLNSG#ZZhJdDIWWmkzR7K&_vHE)Uyt@3gWaKQvl~+QNSmsK=NOu~HqvUtMilSm6I+?_)ssUJ zZhv&9Z2M>y$N^-S^1Ex%`>8<&3e)G&~^qa+1p%{xDWcaO??e;&Uq4d<4 z>6aai_#OYV4acX%-u4o&I-Pw2z6Mp>;-;ho2R|+S6qoq<;+F8?d@~cFysTV&z5?<4 zudt&FC2$Y^AjZ#@9v?+nStKkC5z|lXP$5UcKlXg*5b99z@$2NpO!%{8P`BR^ohf;3 z9fn7n4k0)L1~E)`OQ+Z~psAas%DT(ZUfvwffo7v)Q-W)V^C3`GWTyW{Cx+3 zQBgK6-4FE?JzV8N(C>Ak99M*0xlAGx43 zcWnW29DbAdJq0|R<_R-gI&$g@w4qp%OWnh>3%UNj`CE2r-RV*d)|!0R=0o|f&AHcU z5wE{QS0|nIx+#!a;`M-vben;GZ{W*r?rtisNYbw*eI-5_PWK`-w-^@i92Q%*DOY#O zD6O57|JhC)KEJhY1uX9syQJ>?Bo#fr5iGDA-jfZyRP|y~8A{Nr3Q{I|?u--jW&ggN z?rn$lz2a}&{q95#yEj?ut@kANcuNI|S##_7arIUC{F(bk_{?Dkp7x!i=#*3z-nTO!(?1u**{{ z0}X|h@cc(}AQ@O*B^#bhMmNcs`|X0tbsk=hN;Rbzf8j;0BhfHW#!Jljg^{C@ik!Ku z*g;Gb-Nnnq{e^%^wVEa%?Q;ENXc z_J;$mHREhGKHidq0#mOp?6#1=YR&TU*X`tbW^2za@q)+bWm!fgGIq!Cq!ux>z>F7G zPi+@yDf|^Y#zmr6!2<*8X@{j?Pc#G2QN72mh<`pA`{$%S+@|_uvxy28fAf#SA=>)=@~ zK+8Mg6!4&p> z#>>-tuss2N*`Ji@j%tso4+vDMmil93rfKj#4qNO97DoFs&ZDqO#;X-IjG4N3gqAHr zgq4&^-+}R7NMHF`Ri{Q#rWRV0p=2(L-GFTHi)aXja^*MvQ0D-qVTpfO{=NucV9#>y zjvGvL7FIL~)?oFV{QFdgO;(_k`c>C7A^v!@%jCzqgF961gNLX$o8UFSyK`#4sWSGedQLOj!;B2&R9(xuXO?(w9tl1o^%xr<4$=Y19GgyWgx`s)VYJ<(N34D4CdQXkR#2I-v%A((i7V#!)!0dt^Ul{){YkHi>LNmAt zr0&Milb+kz4*Lz-bRy8uIvI1~=6)c4-1PR|l!w+`OPLqYy|$O1&gxPXgCB!SuAQ(P z_ZNvWLxk6w)dDpv+a6lK8|l(JRCqL6obll)|Rt1Nitq4*j{I#{6UcZhE`VRV!WEBGZZJA(b`@78f$D# z_p^gd^mhFHK9WioN`l)iMK*In(EP?gAL-~G=$lS&ev3^)C1Loi5=H@k)8Hk&i7fe= ztg~6Nz>BfNGlq1PRxCGiowaS=BhY7`rBie;ZO%Zl{*4{Bq)Khihh=7xBZcyo7(!*+ zzOpFpT8%WWf25y!_iyzeyspg}C{gHylyNGwRI<=4E)giWW5luKZbOxr)}p~y5Oafvfup<=sb`?YxYxtkH}9AK&pp7 zP%|I@;!pU$@%Mj_*qBN^>i-8H|C1W=bEWz$21{6N^y5*9Q*~_uDzDnFPSrdHvk!0M z`To!~3z8R7`fL*zPyO~+5j>m~<`CZrxPqblj>rb3SY4cwX?vD9?lP5t=Sf8Ai+BeQ z=y#&V{-2}q{Zd0nUcJap*<-t0P>u|@XuZF28o?3|G8JS89~z5MWwFSH`x_bO1&T5m zsTmHwRT|WQkO+qIO6EOXv5E~IWOe8#-NEpDCn%13Q})@;m9l)*6nUFjhgQ0q$TRK= z`1ZnVIz(Gg)q(iY6vcnTy&vO^?Egw)RVb)}XHcE~z&2CT!^+czBGZ$6+rl2rQ0sn(~V8!HF$~i8ndX)gr@|Z7(SO(qC znoh|^mvB>(g65v}qC;L121;IuRNjEZ1x-IO91WtEy?Ex^U7z*l#&k+Qzp1%j#z=7$ z7Wugp%^mSn(Be#Y+C%+AmSp)-K@i-sM=6tEB&ebDoo{%Rw z)|#Z@KHy#HXMyLuhXsx}3#zc0hBC&nYQ?;FI3kIvHr(X?;+gqNHSmB(qk#&wipNjE zy?YFBPgsujSbIlpr#kmV{LP@kV+zo>uuAV%N~J(8}|-Tw#5PpMr1 literal 0 HcmV?d00001 diff --git a/doc/vscode.md b/doc/vscode.md new file mode 100644 index 0000000000..3f990c020d --- /dev/null +++ b/doc/vscode.md @@ -0,0 +1,90 @@ +# Visual Studio Code Setup + +## Table of Contents + +* [V language support](#v-language-support) +* [Visual Debugging](#visual-debugging) + +## V language support + +The [V VS Code Extention](https://marketplace.visualstudio.com/items?itemName=vlanguage.vscode-vlang) provides V language support for Visual Studio Code. + +![Screenshot Code with activated extention](https://github.com/vlang/vscode-vlang/raw/HEAD/images/demo.png) + +**Features:** +* Syntax Highlighting. +* Code Snippets for quick coding. +* Format code on file save as well as format manually (using v fmt). +* Linter (Workspace files only). +[more](https://marketplace.visualstudio.com/items?itemName=vlanguage.vscode-vlang) + +**Hint:** This extention will not add the V compiler! Information on how to [install V compiler](https://github.com/vlang/v/blob/master/doc/docs.md#install-from-source) on your operating system. + +### Setup + +Install [V VS Code Extention](https://marketplace.visualstudio.com/items?itemName=vlanguage.vscode-vlang). + +## Visual Debugging + +![screenshot visual debugger](https://github.com/vlang/v/blob/master/doc/img/vscode-debugger.png?raw=true) + +The [C/C++ Extention](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools) for Visual Studio Code provides visual conditional debugging. + +**Features:** +* Conditional breakpoints +* Function breakpoints +* Expression evaluation +* Change Values +[more Features & Documentation](https://code.visualstudio.com/docs/cpp/cpp-debug) + +**Hint:** Not all types (e.g. Array) in V currently create the required [DWARF](https://en.wikipedia.org/wiki/DWARF) information to show and edit the variable. + +### Setup + +1. Install the [C/C++ Extention](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools) +2. Open `RUN AND DEBUG` panel (Debug Icon in left panel). +3. Click on `Show` all automatic debug configurations. +4. Select `Add config`. +5. Select environment `C++ (GDB/LLDB)`. +6. Change the line `"program": "Programmnamen eingeben, z. B. \"${workspaceFolder}/a.out\"",` to point to your compiled application e.g. `"program": "${workspaceFolder}/hello",`. + +This will add a block to your `.workspace` file or creates the file `.vscode/launch.json`: +```json +{ + // 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": "(lldb) Starten", + "type": "cppdbg", + "request": "launch", + "program": "Programmnamen eingeben, z. B. \"${workspaceFolder}/a.out\"", + "args": [], + "stopAtEntry": false, + "cwd": "${fileDirname}", + "environment": [], + "externalConsole": false, + "MIMode": "lldb" + } + ] +} +``` + +### Usage + +To allow your compiled application to be debugged. The application needs to include additional debugging information ([DWARF](https://en.wikipedia.org/wiki/DWARF)). + +**1. Compile with debugging information:** +`v -b c -g hello.v -o hello` or short `v -g hello.v` + +The `-g` option will add the needed debugging informations. More Options are explained in the [docs](docs.md#debugging). + + +**2. Start Debugging** + +1. Open your source code and set the required break points +2. Click on the Debug Icon in the left Icon panel and klick `> (lldb) Start` or use `F5` to launch your application in debug mode. + +For all options look at the official [C/C++ Extention documentation](https://code.visualstudio.com/docs/cpp/cpp-debug). \ No newline at end of file