Search code examples
visual-studio-coderustvscode-debuggerapache-arrow

Error occurs when debugging rust program with vscode (windows only)


I am trying to debug the code below with vscode, but an error occurs.

Development environment

  • Microsoft Windows 10 Home 10.0.19042 Build 19042
  • rustc 1.49.0 (e1884a8e3 2020-12-29)
  • Vscode 1.54.3
  • CodeLLDB v1.6.1
// Cargo.toml
//[dependencies]
//datafusion = "3.0.0"
//arrow = "3.0.0"
//tokio = { version = "0.2", features = ["macros", "blocking", "rt-core", "rt-threaded", "sync"] }


use std::time::{Duration, Instant};
use arrow::util::pretty;
use datafusion::error::Result;
use datafusion::prelude::*;

/// This example demonstrates executing a simple query against an Arrow data source (CSV) and
/// fetching results

#[tokio::main]
async fn main() -> Result<()> {
    println!("======== Start Program ========");
    let start = Instant::now();

    // let res_path = r"/root/workspace/project/hello_arrow/res/sample_01.csv";

    // http://insideairbnb.com/get-the-data.html
    // listing_id,id,date,reviewer_id,reviewer_name,comments
    // Boston, Massachusetts, United States
    let res_path = r"D:\workspace\vscode\arrow_rust\res\review.01.csv";

    // create local execution context
    let mut ctx = ExecutionContext::new();
    // register csv file with the execution context
    ctx.register_csv("datatable_01", res_path, CsvReadOptions::new())?;

    // execute the query
    let sql = "SELECT count(id) from datatable_01";
    let df = ctx.sql(sql)?;
    let results = df.collect().await?;

    // print the results
    pretty::print_batches(&results)?;

    let duration = start.elapsed();

    println!("Time elapsed in expensive_function() is: {:?}", duration);
    println!("======== End Program ========");
    Ok(())
}

Error Code

configuration: {
  type: 'lldb',
  request: 'launch',
  name: 'Debug Window',
  program: '${workspaceRoot}/target/debug/arrow_rust.exe',
  args: [],
  cwd: '${workspaceRoot}',
  sourceLanguages: [ 'rust' ],
  __configurationTarget: 5,
  relativePathBase: 'd:\\workspace\\vscode\\arrow_rust'
}
Listening on port 8541
error: arrow_rust.exe :: Class 'arrow::datatypes::DataType' has a member '__0' of type 'alloc::vec::Vec<arrow::datatypes::Field>' which does not have a complete definition.
Debug adapter exit code=3221225620, signal=null.

The program runs normally. Debugging fine on Linux for the same code.

Is there any other way to debug on Windows?


Solution

  • I have the same problem.
    Inspired by the link below, I have solved it.

    https://github.com/vadimcn/vscode-lldb/issues/410#issuecomment-786791796

    The reason is that I have installed NVIDIA Nsight.
    As shown below, the msdia140.dll for Nsight has been loaded by codelldb.

    msdia140.dll

    Run PowerShell as administrator. Execute the command below to register the component. Then codelldb works.

    regsvr32.exe C:\Users\【user name】\.vscode\extensions\vadimcn.vscode-lldb-1.6.8\lldb\bin\msdia140.dll
    

    PowerShell

    Update
    For newer versions, the DLL has moved to another folder:

    regsvr32.exe C:\Users\[user name]\.vscode\extensions\vadimcn.vscode-lldb-1.8.1\adapter\msdia140.dll