如何使用 erlang 插件在 vscode 中调试 rebar3 erlang?

Posted

技术标签:

【中文标题】如何使用 erlang 插件在 vscode 中调试 rebar3 erlang?【英文标题】:How do I debug rebar3 erlang in vscode with the erlang plugin? 【发布时间】:2021-12-03 23:30:49 【问题描述】:

我正在为 vscode 使用 Erlang 语言插件。我创建了一个新的 rebar3 应用程序并创建了一个不使用主管的简单应用程序:

-module(test_app_app).

-behaviour(application).

-export([start/2, stop/1]).

start(_StartType, _StartArgs) ->
    load_file("input.txt").

stop(_State) ->
    ok.

load_file(Filename) ->
    case file:read_file(Filename) of
        ok, Bin ->
            Bin;
        error, Reason ->
            erlang:error(Reason)
    end.

我已经像这样配置了一个 launch.json 文件:


    "version": "0.2.0",
    "configurations": [
        
            "name": "Launch erlang",
            "type": "erlang",
            "request": "launch",
            "cwd": "$workspaceRoot",
            "arguments": "-s test_app_app start",
            "preLaunchTask": "rebar3 compile"
        
    ]

还有一个用于编译的tasks.json:


    "version": "2.0.0",
    "tasks": [
        
            "label": "rebar3 compile",
            "type": "shell",
            "command": "rebar3 compile",
            "group": 
                "kind": "build",
                "isDefault": true
            ,
            "problemMatcher": "$erlang"
        
    ]

当我按下 F5 时,我得到以下输出:

compiling erlang bridge to '/home/peter/.vscode/extensions/pgourlain.erlang-0.8.1/_build/default/lib/ebin'
Compiling arguments file  "/tmp/bp_1454870.erl"
Compile result: sucess 
Module bp_1454870 loaded
"init terminating in do_boot",undef,[t
est_app_app,start,[],[],init,start_em,1,[],init,do_boot,3,[]]
init terminating in do_boot (undef,[test_app_app,start,[],[],init,start_em,1,[],init,do_boot,3,[]])

Crash dump is being written to: erl_crash.dump...
done
erl exit code:1
erl exit with code 1

有人知道为什么这对我不起作用吗?

【问题讨论】:

【参考方案1】:

问题出在您的 launch.json 中。您尝试从模块 test_app_app 运行函数 start/0,但该函数不存在。

尝试使用

"arguments": "-eval \"application:start(test_app)\""

【讨论】:

非常感谢 :) 这对我有用!所以我之前尝试使用 -s 参数,但没有得到任何结果。 eval 是更好的方法吗?是否有与上述使用-s的等价物?我试过-s application start [] [] before @PeterShort 我认为不可能为此使用-s-s 的 Erlang 文档说我们调用的函数应该是 arity 0 或 arity 1。在后一种情况下,函数应该接受提供的参数作为原子列表。 application:start 不接受原子列表作为参数。

以上是关于如何使用 erlang 插件在 vscode 中调试 rebar3 erlang?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用vscode断点调试laravel

VSCode如何进行插件迁移

VSCode小说插件ReadNovel如何根据内容查找页码

VSCode小说插件ReadNovel如何根据内容查找页码

如何开发一个vscode插件

如何在Hue中调优Impala和Hive查询