GDB 跟踪点的操作不起作用
gdb tracepoint's action does not work
可以跟踪跟踪点,但跟踪操作不能正常工作。在gdb的最后,下面显示了跟踪点被跟踪。但"收取$regs"并没有如预期的那样起作用。
我的平台是RH6.4
1.gdbserver侧。
gdbserver :10000 ./a.out
Process ./a.out created; pid = 10466
Listening on port 10000
Remote debugging from host 127.0.0.1
2.gdb侧。
gdb a.out
(gdb) target remote :10000
Remote debugging using :10000
Reading symbols from /lib64/ld-linux-x86-64.so.2...(no debugging symbols found)...done.
Loaded symbols for /lib64/ld-linux-x86-64.so.2
0x00000033b7000b00 in _start () from /lib64/ld-linux-x86-64.so.2
Created trace state variable $trace_timestamp for target's variable 1.
Missing separate debuginfos, use: debuginfo-install glibc-2.12-1.107.el6.x86_64
(gdb) trace main
Tracepoint 1 at 0x400541: file a.c, line 12.
(gdb) actions 1
collect $regs
end
(gdb) tstart
(gdb) break 15
Breakpoint 2 at 0x40055f: file a.c, line 15.
Breakpoint 2, main (argc=1, argv=0x7fffca819f08) at a.c:18
18 sleep (1);
(gdb) cont
Continuing.
(gdb) tstop
(gdb) tfind
Found trace frame 0, tracepoint 1
12 c = 2;
我想您希望跟踪点在源文件的实际main
声明行中,我错了吗?
重要的是,它被放在函数的入口点,实际上,这是第一个函数的代码行,根据您提供的信息,它应该是c = 2;
另一方面,这只是一个愚蠢的细节,请注意,您在第15行没有代码,并且在第18行设置了断点。
编辑:
根据您的评论,您希望tfind
转储所有收集的寄存器,但您需要额外的步骤:通过在没有参数的情况下使用tfind
,您选择了下一个跟踪点(本例中为第一个),并且,要转储此跟踪点的操作收集信息,您应该调用tdump
相关文章:
- 我的神经网络不起作用 [XOR 问题]
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- C++为什么尽管我调用了void函数,它却不起作用
- 为什么在保护模式下继承升级不起作用
- 循环在计数器中不起作用
- 在其他文件中创建类时在 c++ 项目中不起作用
- "+=" 操作在类型之间不起作用 std::复杂<double>和__complex__双精度
- 为什么当我对数组使用增量操作时,do for 循环不起作用
- OpenCV像素操作有时不起作用
- 操作溢出不起作用C
- 由于某种原因,使用 OR 运算符执行操作不起作用
- Boost.Spirit解析字符串的语义操作不起作用
- GDB 跟踪点的操作不起作用
- 当 std::fprintf(stderr,..) 失败时,操作是否不起作用,或者可以在失败之前写入一点
- 提升异步操作不起作用(对我来说)
- 矢量上的擦除操作不起作用
- 迭代器操作不起作用
- 带有制表符的strcat操作不起作用
- 标准函数和操作在类构造函数中不起作用