我主动使用C++ 11的功能。我有在Visual Studio 2013中创建的程序,它依靠lambdas运行多个线程(lambda表示任务,线程接收它必须运行的lambda实例)。 Lambda在静态库中定义,并在可执行文件中链接,该文件从此可执行文件创建的线程调用它。 当我尝试用GDB调试此应用程序的Linux版本时,它看起来像GDB不能进入包含lambda的方法。它不能在这个函数中设置断点,当我尝试进入时,它甚至会在lambda调用它的正文的方法中进行,但是在这些方法的return
之后它不会去到lambda体,它会转到下一个方法lambda调用等。 有什么方法可以用GDB调试lambda身体?GDB可以调试lambda吗?
15
A
回答
4
我以前在堆栈跟踪中看过它们,所以它至少知道它们。我从来没有尝试过在一个中设置正常断点。这是一种破解,但是你可以在x86(-64)上使用asm volatile("int $3");
来在一个(或任何地方)设置断点。
下面是一个例子程序:
int main(){
auto f = [](){
asm volatile("int $3");
};
f();
return 0;
}
下面是它的回溯,当它击中该断点:
#0 0x0000000000400577 in main::{lambda()#1}::operator()() const()
#1 0x000000000040058d in main()
1
从我的经验,GDB不能踏进lambda表达式 - 它只是跳过他们。不仅如此,进入lambda定义似乎混淆了gdb,并且它继续到当前函数的末尾。但是,你可以在lambda表达式中明确地放置一个断点,并且如果你达到那个点,你就会停下来。这显然很不理想。
相关问题
- 1. gdb可以调试suid root程序吗?
- 2. 我可以使用GDB调试正在运行的进程吗?
- 3. 可以32bit gdb调试64bit二进制文件吗?
- 4. gdb可以调试gcc风格的嵌套C函数吗?
- 5. 我可以用cuda-gdb调试openACC吗?还是其他的调试工具?
- 6. aws lambda可以调用matlab函数吗?
- 7. Lambda可以调用Alexa技能吗?
- 8. 用gdb调试
- 9. 我可以配置emacs来像图形调试器一样使用gdb吗?
- 10. 用gdb调试C
- 11. gdb print NSString调试
- 12. GDB调试保护
- 13. GDB调试警告
- 14. GDB远程调试
- 15. gdb调试奇怪
- 16. gdb可以打印64位地址吗?
- 17. 使用gdb调试回调
- 18. 是否可以在GDB调试器中“跳转”/“跳过”?
- 19. gdb可以用什么样的程序进行调试?
- 20. 是否可以使用gdb通过ssh远程调试?
- 21. 在GDB中优化值:gdb可以自动解码它吗?
- 22. 可以像jQuery那样调试JQuery吗?
- 23. 你可以使用Eclipse调试PhoneGap吗?
- 24. 我可以从FlashDevelop调试Javascript吗?
- 25. 我可以调试bluecove库吗?
- 26. gdb/mi gdb服务器调试
- 27. 我可以限制AWS Lambda的并发调用吗?
- 28. 我可以给lambda一个名字吗?
- 29. DFA可以有epsilon/lambda转换吗?
- 30. 我可以做一个lambda参数吗?
你是什么意思的“方法”,在这里?这个术语在C++中没有很好的定义。 –
我说的是''method'时的非静态对象成员函数。 – Vitaliy
谢谢澄清。 –