找到程序挂起的位置

时间:2014-05-04 13:36:11

标签: gdb

当我使用gdb附加挂起进程时,获取以下信息。 我怎么知道关键点在哪里? 地址' 0x000000000041f828'?

是什么

提前致谢,

(gdb) where
#0  0x00002b2a5b2c379a in sigsuspend () from /lib64/libc.so.6
#1  0x000000000041e9fe in ?? ()
#2  0x000000000041fd9b in ?? ()
#3  0x000000000041f7d9 in ?? ()
#4  0x000000000041f828 in ?? ()
#5  0x000000000041f828 in ?? ()
#6  0x000000000041f828 in ?? ()
#7  0x000000000041f828 in ?? ()
#8  0x000000000041f828 in ?? ()
#9  0x000000000041f828 in ?? ()
#10 0x000000000041f828 in ?? ()
#11 0x000000000041f828 in ?? ()
#12 0x000000000041f828 in ?? ()
#13 0x000000000041f828 in ?? ()
#14 0x000000000041f828 in ?? ()
#15 0x000000000041f828 in ?? ()
#16 0x000000000041f828 in ?? ()
#17 0x0000000000403bc5 in ?? ()
#18 0x0000000000405f93 in ?? ()
#19 0x00002b2a5b2b0994 in __libc_start_main () from /lib64/libc.so.6
#20 0x0000000000403729 in ?? ()

1 个答案:

答案 0 :(得分:0)

  

当我使用gdb附加挂起的进程时,获取以下信息。

你得到的输出有两个可能的原因:

  1. 您已附加了该流程,但未指定正在运行的可执行文件或
  2. 您的二进制文件已被完全剥离。
  3. 对于案例1,不要这样做:

    gdb
    (gdb) attach 1234
    

    请改为:

    gdb -p 1234
    

    或者这个:

    gdb /path/to/binary 1234
    

    或者这个:

    gdb /path/to/binary
    (gdb) attach 1234
    

    对于案例2,不要完全剥离二进制文件,因为它无法进行调试。如果您没有将其作为单独的构建步骤进行,请查找" stray" -s在链接行,并将其删除。