phoityne-vscode

ghci debug viewer on Visual Studio Code https://github.com/phoityne/phoityne-vscode

Latest on Hackage:0.0.19.0

This package is not currently in any snapshots. If you're interested in using it, we recommend adding it to Stackage Nightly. Doing so will make builds more reliable, and allow stackage.org to host generated Haddocks.

BSD3 licensed by phoityne_hs
Maintained by phoityne.hs@gmail.com

Phoityne VSCode

Phoityne is a ghci debug viewer for Visual Studio Code.

Information

  • [2017/12/16] phoityne-vscode released.
    Marketplace phoityne-vscode-0.0.17 hackage phoityne-vscode-0.0.19.0
    Need update from hackage !!.
  • Release Summary [ADD] checking hackage package version and inform on console if using lower version. [MODIFY] Supporting Multi-root Workspaces. version up tasks.json. * [MODIFY] Supporting Multi-root Workspaces. setBreakpointsRequest.
    Need recreate .vscde/launch.json and tasks.json in the project folder !!.

10_quick_start.gif
(This sample project is available from here.)

Important

  • LIMITATION: Source file extension must be ".hs"
  • LIMITATION: Can not use STDIN handle while debugging.
  • When you start debugging for the first time, .vscode/tasks.json will be created automatically. Then you can use F6, F7, F8 shortcut key. F5 : start debug F6 : show command menu (for stack watch) Shift + F6 : stop stack watch F7 : stack clean & build F8 : stack test F9 : put bp on current line * Shift + F9 : put bp on current column
  • While debugging, you can use F5, F9, F10, F11 shortcut key. F5 : jump to next bp F9 : put bp on the line Shift + F9 : put bp on the column F10 : step next * F11 : step into

Features

Run to Cursor

03_run_to_cursor.gif

Bindings & Watch

The variable added to watch will be forced.

02_watch.gif

Stack trace

05_stacktrace.gif

Break condition

04_condition.gif

Hit count break condition

Supports these operators. == /= <, > <=, >= mod, % just digit is same with '>='

07_hit_count.gif

Break on Exception

08_exception.gif

Repl & Completions

06_repl.gif

Capabilites

  • supportsConfigurationDoneRequest : yes
  • supportsFunctionBreakpoints : yes
  • supportsConditionalBreakpoints : yes
  • supportsHitConditionalBreakpoints : yes
  • supportsEvaluateForHovers : yes
  • exceptionBreakpointFilters : yes
  • supportsStepBack : no
  • supportsSetVariable : no
  • supportsRestartFrame : no
  • supportsGotoTargetsRequest : no
  • supportsStepInTargetsRequest : no
  • supportsCompletionsRequest : yes
  • supportsModulesRequest : no
  • additionalModuleColumns : no
  • supportedChecksumAlgorithms : no
  • supportsRestartRequest : no
  • supportsExceptionOptions : no
  • supportsValueFormattingOptions : no
  • supportsExceptionInfoRequest : no
  • supportTerminateDebuggee : no
  • supportsDelayedStackTraceLoading : no

Install

Run stack install

% stack install phoityne-vscode
  . . . . .
%

Add 'phoityne-vscode.exe' to PATH environment.

Windows)

% where $path:phoityne-vscode.exe
C:\Users\[user name]\AppData\Roaming\local\bin\phoityne-vscode.exe

% phoityne-vscode --version
phoityne-vscode-x.x.x.x
%
% code

linux)

$ which phoityne-vscode
~/.local/bin/phoityne-vscode
$
$ phoityne-vscode --version
phoityne-vscode-x.x.x.x
$
$ code

Install vscode extensions

  1. run VSCode and open stack project Folder from file menu.
  2. open Extensions from side menu of VSCode.
  3. search "haskell"
  4. select "Haskell GHCi debug viewer Phoityne"

Configuration

.vscode/launch.json

|NAME|REQUIRED OR OPTIONAL|DEFAULT SETTING|DESCRIPTION| |:--|:--:|:--|:--| |startup|required|${workspaceRoot}/test/Spec.hs|debug startup file, will be loaded automatically.| |startupFunc|optional|"" (empty string)|debug startup function, will be run instead of main function.| |startupArgs|optional|"" (empty string)|arguments for startup function. set as string type.| |ghciCmd|required|stack ghci --test --no-load --no-build --main-is TARGET --ghci-options -fprint-evld-with-show|launch ghci command, must be Prelude module loaded. For example, "ghci -i${workspaceRoot}/src", "cabal exec -- ghci -i${workspaceRoot}/src"| |ghciPrompt|required|H>>=|ghci command prompt string.| |ghciInitialPrompt|optional|"Prelude> "|initial pormpt of ghci. set it when using custom prompt. e.g. set in .ghci| |stopOnEntry|required|true|stop or not after debugger launched. |mainArgs|optional|"" (empty string)|main arguments.| |logFile|required|${workspaceRoot}/.vscode/phoityne.log|internal log file.| |logLevel|required|WARNING|internal log level.|

changing ghci initial prompt

If you change ghci prompt in .ghci file, or ghci prompt is changed from "Prelude>" by applying NoImplicitPrelude extension, set the initial prompt variable to same prompt string.

% diff .vscode/launch.json.old .vscode/launch.json
19c19
<             "ghciInitialPrompt": "Prelude> "      // default value.
---
>             "ghciInitialPrompt": "> "             // e.g.
%

Make sure needs of the last space, and don't forget adding it.

setting the startup hs file

Set the startup variable to the path of .hs file in which main function is defined.

% diff .vscode/launch.json.old .vscode/launch.json
10c10
<             "startup": "${workspaceRoot}/test/Spec.hs",    // default value.
---
>             "startup": "${workspaceRoot}/app/run.hs",     // e.g.
%

setting the startup function

If you want to run the specific function instead of main function, set the startupFunc variable.
For example, when specifying the following startDebug function,

startDebug :: String -> IO ()
startDebug name = do
  putStrLn "hello"
  putStrLn name 

set the valiavles in the launch.json file.

% diff .vscode/launch.json.old .vscode/launch.json
11c12
<             "startupFunc": "",    // default value.
<             "startupArgs": "",    // default value.
---
>             "startupFunc": "startDebug",       // e.g.
>             "startupArgs": "\"phoityne\"",     // e.g.
%

changing log level

For debuging phoityen itself, change the log level to DEBUG.
Adding Issue with the debug log.

% diff .vscode/launch.json.old .vscode/launch.json
12c12
<             "logLevel": "WARNING",               // default value.
---
>             "logLevel": "DEBUG",                 // e.g.
%

.vscode/tasks.json

|TASK NAME|REQUIRED OR OPTIONAL|DEFAULT SETTING|DESCRIPTION| |:--|:--:|:--|:--| |stack build|required|stack build|task definition for F6 shortcut key.| |stack clean & build|required|stack clean && stack build|task definition for F7 shortcut key.| |stack test|required|stack test|task definition for F8 shortcut key.| |stack watch|required|stack build --test --no-run-tests --file-watch|task definition for F6 shortcut key.|

Changes

20171216 phoityne-vscode-0.0.19.0 [ADD] checking hackage package version and inform on console if using lower version. [MODIFY] Supporting Multi-root Workspaces. version up tasks.json. * [MODIFY] Supporting Multi-root Workspaces. setBreakpointsRequest.

20171112 phoityne-vscode-0.0.18.0 [FIX] 29 : Space in filename and reload on save bug. [MODIFY] 20 : During stopping on breakpoints selection is one character less.

20171008 phoityne-vscode-0.0.17.0 [FIX] loading modules after ghci started, on ghc-8.2.1. [ADD] 24 : add variable "ghciInitialPrompt" to launch.json file. [ADD] 28 : escape backslash of startup hs file path. [ADD] to set any start point, added startup function and arguments valiables in the launch.json file.

20170910 phoityne-vscode-0.0.16.0 [ADD] supported ghc-8.2.0. [ADD] check hackage phoityen version, and show message for needs of updating.

20170816 phoityne-vscode-0.0.15.0 [ADD] supported break-on-exception and break-on-error. [ADD] 5 :adding ghci run enviroment variable setting. * [MODIFY] 21 : support evaluateName attribute for watch variable.

20170507 phoityne-vscode-0.0.14.0 [ADD] 15 : adding main args setting to launch.json [FIX] 16 : Exit on stdin eof

20170402 phoityne-vscode-0.0.13.0 [FIX] 10 : Unable to set breakpoints [FIX] 11 : Debugger not progressing past IO [ADD] 12 : support Column break points [MODIFY] 6 : adding stopOnEntry setting on launch.json * [MODIFY] : add ghci-options -fprint-evld-with-show to stack run command in launch.json file.

20170205 phoityne-vscode-0.0.12.0 * [FIX] 8 : Unterminated process after leaving GHCi

20161218 phoityne-vscode-0.0.11.0 [ADD] Hit count break conditionに対応した。 [FIX] エラー終了時にterminate eventを送信するように修正した。

20161009 phoityne-vscode-0.0.10.0 [MODIFY] REPL結果をイベントで返すように変更した。EvaluateResponseで返した場合は、複数行表示ができないため。 [MODIFY] REPLにおいて、複数行の入力に対応した。 [MODIFY] REPLにおいて、デバッグ関連のコマンドを実行しないように変更した。 [FIX] バインディング変数情報の取得において、複数行にまたがる情報のパースが失敗していた箇所を修正した。

20160919 phoityne-vscode-0.0.9.0 [ADD] ConfigurationDoneRequestに対応した。 [ADD] CompletionsRequestに対応した。 [MODIFY] Hover時の型表示を改善した。 [MODIFY] Hover時のforce実行を止めた。 * [FIX] setBreakpointsResponse, setFunctionBreakpointsResponseのBodyデータにおいて、キー名を修正した。

20160804 phoityne-vscode-0.0.8.0 [MODIFY] モジュール構成の変更。 [MODIFY] debugger adopter interface Capabilitiesの変更に対応した。

20160704 phoityne-vscode-0.0.7.0 [MODIFY] debugger adopter interface Capabilitiesの変更に対応した。 [MODIFY] debugger adopter interface StackFrameの変更に対応した。(endLin, endColumnの追加) * [MODIFY] debugger adopter interface Variableの変更に対応した。(typeの追加)

20160626 phoityne-vscode-0.0.6.0

  • [MODIFY] launchリクエストのghciCmdパラメータで指定したghci起動コマンドを使用するように変更した。
  • [MODIFY] ghciの起動に失敗した場合、デバッグを終了するように修正した。

20160605 phoityne-vscode-0.0.5.0

  • [MODIFY] launchリクエストのnoDebugパラメータをMaybeに変更した。

20160601 phoityne-vscode-0.0.4.0

  • [MODIFY] スタックトレースの表示を番号から関数名に変更した。
  • [MODIFY] GHC-8.0.1のghciにおいて、:step結果の出力変更(Stopped in)に対応した。

20160515 phoityne-vscode-0.0.3.0

  • [ADD] tasks.jsonが存在しない場合は、作成するようにした。
  • [ADD] package.json にキーバインディング設定を追加した。(stack build, stack clean, stack test, stack watch)
  • [ADD] hover requestに対して、:info結果を返すようにした。

20160508 phoityne-vscode-0.0.2.0

  • [ADD] デバッガ起動後、ファイル保存時にghciにリロードするようにした。
  • [ADD] 条件付きブレークポイントに対応した。

20160504 phoityne-vscode-0.0.1.0

  • [INFO] Initial release.

comments powered byDisqus