phoityne-vscode: Haskell Debug Adapter for Visual Studio Code.

[ bsd3, development, program ] [ Propose Tags ]

Please see README.md


[Skip to Readme]

Downloads

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees

Candidates

  • No Candidates
Versions [RSS] 0.0.1.0, 0.0.2.0, 0.0.3.0, 0.0.4.0, 0.0.5.0, 0.0.6.0, 0.0.7.0, 0.0.8.0, 0.0.9.0, 0.0.10.0, 0.0.11.0, 0.0.12.0, 0.0.13.0, 0.0.14.0, 0.0.15.0, 0.0.16.0, 0.0.17.0, 0.0.18.0, 0.0.19.0, 0.0.20.0, 0.0.21.0, 0.0.22.0, 0.0.23.0, 0.0.24.0, 0.0.25.0, 0.0.26.0, 0.0.27.0, 0.0.28.0
Change log Changelog.md
Dependencies aeson, base (>=4.7 && <5), bytestring, Cabal, cmdargs, conduit, conduit-extra, containers, data-default, directory, filepath, fsnotify, hslogger, lens, MissingH, mtl, parsec, process, resourcet, safe, safe-exceptions, split, text, transformers [details]
License BSD-3-Clause
Copyright 2016-2018 phoityne_hs
Author phoityne_hs
Maintainer phoityne.hs@gmail.com
Category Development
Home page https://github.com/phoityne/phoityne-vscode
Bug tracker https://github.com/phoityne/phoityne-vscode/issues
Uploaded by phoityne_hs at 2018-08-03T21:51:50Z
Distributions
Reverse Dependencies 1 direct, 0 indirect [details]
Executables phoityne-vscode
Downloads 18669 total (83 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs not available [build log]
Last success reported on 2018-08-03 [all 3 reports]

Readme for phoityne-vscode-0.0.26.0

[back to package description]

Phoityne VSCode

Phoityne is a Haskell GHCi debug adapter for Visual Studio Code.

Information

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

and more

Better inspection. This is an experimental enhancement.
There are limitations and additional installation.
Here are the details.

01_inspect_variables.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
  • supportsLogPoints : yes (by haskell-dap)

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 adapter 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.