Search code examples
c++gdbbacktraceintel-pin

Debugging PIN tool add-symbol-file doesn't work


To debug a simulator which uses PIN tool, by using 2 different terminal windows, I do the following:

/home/agy/mcsim/pin/intel64/bin/pinbin -pause_tool 5 -t /home/agy/mcsim/Pthread/mypthreadtool -port 47145 -skip_first 10000 -- McSim/JacNoBoost/JACCARD
Pausing to attach to pid 5465
To load the tool's debug info to gdb use:
   add-symbol-file /home/agy/mcsim/Pthread/mypthreadtool 0x7f86e6c06ee0 -s .data 0x7f86e709f620 -s .bss 0x7f86e70aaac0

On the other window I do the following:

gdb /home/agy/mcsim/Pthread/mypthreadtool
GNU gdb (Ubuntu 7.7-0ubuntu3.1) 7.7
Copyright (C) 2014 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from /home/agy/mcsim/Pthread/mypthreadtool...done.
(gdb) attach 5465
Attaching to program: /home/agy/mcsim/Pthread/mypthreadtool, process 5465
0x0000000030592c70 in ?? ()
(gdb) add-symbol-file /home/agy/mcsim/Pthread/mypthreadtool 0x7f86e6c06ee0 -s .data 0x7f86e709f620 -s .bss 0x7f86e70aaac0
add symbol table from file "/home/agy/mcsim/Pthread/mypthreadtool" at
    .text_addr = 0x7f86e6c06ee0
    .data_addr = 0x7f86e709f620
    .bss_addr = 0x7f86e70aaac0
(y or n) y
Reading symbols from /home/agy/mcsim/Pthread/mypthreadtool...done.
(gdb) c
Continuing.

At some point, pin tool freezes and i manually send interrupt signal to pin tool and try to debug it on the attached window. To understand at which line pin implementation stucks, I tried backtrace command but it returns with question marks even though the symbol file is added.

Program received signal SIGINT, Interrupt.
0x000000003052c474 in ?? ()
(gdb) backtrace
#0  0x000000003052c474 in ?? ()
#1  0x00007f86e5570850 in ?? ()
#2  0x000000003070c290 in ?? ()
#3  0x0000000001dda880 in ?? ()
#4  0x0000000001dda880 in ?? ()
#5  0x000000000040e03a in ?? ()
#6  0x0000000030643de0 in ?? ()
#7  0x00007f86d5ada0c0 in ?? ()
#8  0x0000000000000012 in ?? ()
#9  0x00007f86e5571350 in ?? ()
#10 0x0000000030aade20 in ?? ()
#11 0x0000000000000000 in ?? ()

I couldn't find the wrong approach here. Could you please help me?


Solution

  • I couldn't find the wrong approach here.

    You are telling GDB that mypthreadtool is your main executable, but it is not: /home/agy/mcsim/pin/intel64/bin/pinbin is.

    Try this:

    gdb /home/agy/mcsim/pin/intel64/bin/pinbin 5465
    (gdb) add-symbol-file /home/agy/mcsim/Pthread/mypthreadtool \
        0x7f86e6c06ee0 -s .data 0x7f86e709f620 -s .bss 0x7f86e70aaac0