如何调试使用CMake.js构建的Node.js插件?

时间:2018-07-27 05:28:00

标签: node.js debugging cmake clion

我希望能够逐步了解我正在制作的Node.js插件的C ++代码。我了解CMake.js具有WebDriverWait选项,但是没有关于它的文档。

我正在CLion中使用node-addon-api模块。

2 个答案:

答案 0 :(得分:1)

我最近偶然发现了一个相同的问题,并成功在Linux系统上使用CMake.js在CLion 2020.3中创建了自定义工具链。

可重复的步骤:

  1. 通过#include <iostream> #include <conio.h> #include <vector> // For the "std::vector" definition using namespace std; int main() { int n; // int arr[n]; // Here, the value of "n" is undefined! int i; int sum=0, avg=0; cout<<"array lengh: "; cin>>n; std::vector<int> arr(n); // This can now be used 'almost' like a plain array cout<<"Enter "<<n<<" array elements: "; for(i=0; i<n; i++) { cin>>arr[i]; sum = sum + arr[i]; } cout<<"\nThe array elements are: \n"; for(i=0; i<n; i++) { cout<<arr[i]<<" "; } cout<<"\n\nSum of all elements is: "<<sum; avg = sum/10; cout<<"\nAnd average is: "<<avg; getch(); return 0; } 安装cmake-js。确保全局安装该软件包,以便您的工具链可在多个项目中使用。
  2. 创建一个npm项目,例如npm install -g cmake-js
  3. 运行mkdir my-project && cd my-project && npm init(对于C ++包装器)。
  4. 在根目录中创建一个npm install bindings && npm install node-addon-api,然后粘贴this。确保将CMakeLists.txt替换为特定于插件的cpp和头文件。
  5. 在CLion中打开file(GLOB SOURCE_FILES hello.cpp)
  6. 转到设置/偏好设置|构建,执行,部署|自定义生成目标,然后点击 + 添加新目标。
  7. 转到构建|工具设定|编程,并将其设置为您在保留全局软件包的npm目录中下载的my-project二进制文件。
  8. 将参数设置为cmake-js,并将工作目录设置为compile -D的根目录。
  9. 转到清洁|工具设定|编程,并将其设置为保存my-project二进制文件的目录。将参数设置为cmake-js,并将工作目录设置为项目的根目录。
  10. 添加新的“运行配置”,然后在 Target 字段中指定刚创建的工具链。将 Executable 指向您的节点可执行文件,并将.js文件添加到您将本机加载项导入到的位置。将工作目录也设置为当前目录。现在,您可以构建目标,还可以调试本机代码的N-API层!

答案 1 :(得分:0)

经过几个月的盲目调试(尽管使用了错误来打印变量),我终于弄清楚了如何将CLion调试器附加到Node.js插件上。 (编辑:我后来发现了一种更好的方法,低于此方法)

  1. 使用“构建”按钮或cmake-js build构建您的插件。由于某些原因,不需要--debug选项。
  2. 在JavaScript代码的第一行添加一个断点。在Node.js配置中启动调试器。 (调试器将在第一行暂停。)
  3. 附加到node进程。了解如何附加到流程here。在流程列表中,您可以通过在列表中键入“节点”来搜索流程。
  4. 在您的C ++代码中添加一个断点,并取消暂停Node.js。现在应该在断点处暂停该过程。

EDIT找到了更简单的方法:

方法2(此方法比第一种更好):

  1. 创建新的应用程序配置。
  2. 填写以下字段:
    • 目标:您的项目
    • 可执行文件:Node二进制文件
    • 程序参数:您的JS文件的名称
    • 工作目录:JS文件所在的目录
    • 启动前:构建项目
  3. 以调试模式启动此配置。

在第一种方法中,每次要调试时都必须执行所有步骤,但是第二种方法将保留有关调试过程的所有信息,因此每次只需要做的就是按Debug。