Intel® oneAPI Data Parallel C++
Support for Intel® oneAPI DPC++ Compiler, Intel® oneAPI DPC++ Library, Intel® DPC++ Compatibility Tool, and GDB*
543 Discussions

Debugger does not show internal lambda's variables.


Program compiled by Intel oneApi DPC++ compiler, integrated in Visual Studio IDE.
Visual Studio debugger does not show values of internal variables in lambda functions.
It is not critical error, but annoing...

My system is: Windows 20h2 + VisualStudio 16.11.5.+ Intel oneApi DPC++ (from w_BaseKit_p_2021.4.0.3421_offline)
Create DPCPPConsoleApplication, put following program:

//CppCon 2015: Arthur O'Dwyer “Lambdas from First Principles: A Whirlwind Tour of C++"” Puzzle #3
#include <iostream>
auto make_kitten(int c) {
static int a = 0;
return [=](int d) {
static int b = 0;
return (a++) + (b++) + c + d;// BREAKPOINT
int main()
auto k1 = make_kitten(1), k2 = make_kitten(2);
std::cout << "(21) k1(20)=" << k1(20) << " (33) k1(30)=" << k1(30) << std::endl;
std::cout << "(26) k2(20)=" << k2(20) << " (38) k2(30)=" << k2(30) << std::endl;

Make breakpoint at line "return (a++) + (b++) + c + d;// BREAKPOINT" and start program.
Reaching the breakpoint, the debugger shows correctly only the variable "с". Other variables "a", "b" and "d" are marked as "identifier "a" ("b", "d") is undefined."
But after switching compiler from Intel to Microsoft, all variables "a", "b", "c" and "d" are visible correctly in debugger. (VisualStudio menu - Project - Intel Compiler - Use Visual C++).
Then switch back to Intel compiler, rebuild solution, run program till the breakpoint - again three variables a,b and d are "undefined".

This example, shown by Arthur O'Dwyer, was chosen by me because each variable was created in a different way:
"a" - static outside the lambda
"b" - static inside the lambda
"c" - captured by value
"d" - the lambda's own argument

To get more info I put following diagnostics code before the breakpoint line "return (a++) + (b++) + c + d;// BREAKPOINT":
#if defined(__INTEL_LLVM_COMPILER)
std::cout << "Intel compiler=" << __INTEL_LLVM_COMPILER << std::endl;;
puts(__PRETTY_FUNCTION__); puts(__FUNCDNAME__);
std::cout << "MS compiler=" << _MSC_FULL_VER << std::endl;;
puts(__FUNCSIG__); puts(__FUNCDNAME__);

Intel compiler prints diagnostics:
Intel compiler=20210400
auto make_kitten(int)::(anonymous class)::operator()(int) const

Visual C++ compiler prints:
MS compiler=192930136
auto __cdecl make_kitten::<lambda_be3af9280098e242fa98aeb8533f2dca>::operator ()(int) const


Labels (1)
0 Kudos
2 Replies


Thanks for reaching out to us.

We are also able to reproduce the issue from our end.

We are looking into it. We will get back to you soon.

Thanks & Regards


0 Kudos

This issue has been escalated to our developers. We'll work on it internally and come back with update.

0 Kudos