vadimcn / codelldb

A native debugger extension for VSCode based on LLDB
https://marketplace.visualstudio.com/items?itemName=vadimcn.vscode-lldb
MIT License
2.43k stars 237 forks source link

it's not possible to see the values of variables inside a function that takes a lambda as an argument. #917

Open io0000 opened 1 year ago

io0000 commented 1 year ago

OS: win10 10.0.19045 VSCode version: 1.77.3 CodeLLDB version: 1.9.0 Compiler: rustc Debuggee: x86_64-windows-msvc, PDB

When debugging, it's not possible to see the values of variables inside a function that takes a lambda as an argument.

Verbose log
[adapter\src\terminal.rs:101] winapi::um::wincon::FreeConsole() = 1
[adapter\src\terminal.rs:102] winapi::um::wincon::AttachConsole(pid) = 1
[adapter\src\terminal.rs:109] winapi::um::wincon::FreeConsole() = 1
ERROR(Python) 23:43:24 codelldb: Traceback (most recent call last):
  File "c:/Users/kk99/.vscode/extensions/vadimcn.vscode-lldb-1.9.0/adapter/scripts\codelldb\codelldb.py", line 153, in evaluate
    value = evaluate_in_context(pycode, is_simple_expr, context)
  File "c:/Users/kk99/.vscode/extensions/vadimcn.vscode-lldb-1.9.0/adapter/scripts\codelldb\codelldb.py", line 290, in evaluate_in_context
    return eval(code, eval_globals, eval_locals)
  File "", line 1, in 
  File "c:/Users/kk99/.vscode/extensions/vadimcn.vscode-lldb-1.9.0/adapter/scripts\codelldb\codelldb.py", line 279, in 
    eval_globals['__eval'] = lambda expr: nat_eval(frame, expr)
  File "c:/Users/kk99/.vscode/extensions/vadimcn.vscode-lldb-1.9.0/adapter/scripts\codelldb\codelldb.py", line 271, in nat_eval
    raise Exception(err.GetCString())
Exception: error: could not find frame's decl context
vadimcn commented 1 year ago

Are you building in debug mode? Can you provide an repro example?

io0000 commented 1 year ago
  1. debug mode

  2. code snippet

fn call_with_one<F>(func: F) -> usize
    where F: Fn(usize) -> usize 
{
    let mut var1 = 1;
    var1 += 5;
    println!("var1:{}", var1);

    func(1)
}

fn main() {
    let double = |x| x * 2;
    let output = call_with_one(double);   
    println!("{}", output);
}
vadimcn commented 1 year ago

Works on Linux. Alas, MSPDB support in LLDB is kinda rough.