【发布时间】:2014-02-14 10:09:01
【问题描述】:
我积极使用 C++ 11 功能。我在 Visual Studio 2013 中创建了依赖 lambda 来运行多个线程的程序(lambda 表示任务,线程接收它必须运行的 lambda 实例)。 Lambda 在静态库中定义并链接在可执行文件中,该可执行文件从该可执行文件创建的线程调用它。
当我尝试使用 GDB 调试此应用程序的 Linux 版本时,看起来 GDB 无法进入包含 lambda 的方法。它不能在这个函数中设置断点,当我尝试进入时,它甚至会进入 lambda 从其主体调用的方法,但是在这些方法中的return 之后它不会进入 lambda 主体,它会进入下一个lambda 调用的方法等。
有没有办法用 GDB 调试 lambdas body?
【问题讨论】:
-
这里的“方法”是什么意思?该术语在 C++ 中没有明确定义。
-
我的意思是说
method时的非静态对象成员函数。 -
感谢您的澄清。
-
刚刚测试,gdb (GNU gdb (GDB) 7.6.1) 可以正确地进入lambda。您使用哪个版本的 GDB?你编译优化,符号剥离?
-
我使用 CentOS 6.5 附带的 GBD,我认为它是 v7.2。我认为这是问题,但不是 lambda one;我在库中有文件
functions.cpp,在应用程序中有文件functions.cpp。当使用此静态库构建的静态库和可执行文件具有完全相同名称的源文件时,GDB 似乎无法工作。当它必须使用库中的functions.cpp时,它看起来像是尝试使用可执行文件中的functions.cpp。所以,问题不在于 lambda。