Vit*_*lii 18 c++ lambda gdb c++11
我主动使用C++ 11功能.我在Visual Studio 2013中创建的程序依赖于lambdas来运行多个线程(lambda表示任务,而线程接收它必须运行的lambda实例).Lambda在静态库中定义,并链接在可执行文件中,该文件从此可执行文件创建的线程调用它.当我尝试使用GDB调试此应用程序的Linux版本时,看起来GDB无法进入包含lambda的方法.它不能在这个函数中设置断点,当我尝试进入时,它甚至会进入lambda从其体调用的方法,但是在return
这些方法之后它不会转到lambda体,它会转到lambda的下一个方法有没有办法用GDB调试lambdas体?
我以前在堆栈跟踪中看到过它们,所以它至少知道它们。我从来没有试过在一个中设置一个正常的断点。这是一种黑客攻击,但您可以通过asm volatile("int $3");
在 x86(-64) 上使用在一个(或任何地方)设置断点。
这是一个示例程序:
int main(){
auto f = [](){
asm volatile("int $3");
};
f();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这是到达该断点时的回溯:
#0 0x0000000000400577 in main::{lambda()#1}::operator()() const ()
#1 0x000000000040058d in main ()
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4685 次 |
最近记录: |