代码之家  ›  专栏  ›  技术社区  ›  Daniel Trebbien

gdb:tstart error的意思是“当你的目标是'exec'时不能这样做”

  •  6
  • Daniel Trebbien  · 技术社区  · 15 年前

    t ,每次程序到达某一行时。因此,我尝试:

    (gdb) trace stoer_wagner_min_cut.hpp :197
    Tracepoint 1 at 0x4123a0: file ./boost/graph/stoer_wagner_min_cut.hpp, line 197.
    (gdb) actions
    Enter actions for tracepoint 1, one per line.
    End with a line saying just "end".
    > collect t
    > end
    (gdb) tstart
    You can't do that when your target is `exec'
    (gdb) break main
    Breakpoint 2 at 0x401448: file time_stoer_wagner.cpp, line 50.
    (gdb) run
    Starting program: C:\Users\Daniel\Documents\projects\stoer_wagner_min_cut/time_stoer_wagner.exe
    [New Thread 3908.0x39c]
    
    Breakpoint 2, main () at time_stoer_wagner.cpp:50
    50        std::ifstream ifs("prgen_500_50_2.txt");
    (gdb) tstart
    You can't do that when your target is `child'
    

    但是错误消息“当您的目标是'exec'时您不能这样做”和“当您的目标是'child'时您不能这样做”对我没有帮助。这些错误意味着什么?

    2 回复  |  直到 15 年前
        1
  •  15
  •   Employed Russian    15 年前

    The tracepoint facility is currently available only for remote targets.

    您应该能够使用gdbserver执行所需的跟踪实验。例子:

    $ gdbserver :0 ./a.out 
    Process ./a.out created; pid = 21838
    Listening on port 51596
    

    在另一个窗口中:

    $ gdb -q ./a.out 
    Reading symbols from /tmp/a.out...done.
    (gdb) target remote :51596
    
    0x00007fa76ec3fa60 in _start () from /lib64/ld-linux-x86-64.so.2
    (gdb) list foo
    1   int foo(int x)
    2   {
    3     return x;
    4   }
    5   
    6   int main()
    7   {
    8     for(int i = 0; i < 10; ++i)
    9       foo(i);
    10    return 0;
    11  }
    (gdb) trace 3
    Tracepoint 1 at 0x40053f: file t.c, line 3.
    (gdb) actions
    > collect x
    > end
    (gdb) c
    

    追踪实验现在收集数据。。。

    推荐文章