Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ GDB可以';插入内部断点_C++_Linux_Gdb_Shared Libraries_Proc - Fatal编程技术网

C++ GDB可以';插入内部断点

C++ GDB可以';插入内部断点,c++,linux,gdb,shared-libraries,proc,C++,Linux,Gdb,Shared Libraries,Proc,我在一个共享库(.so)的函数中添加了两个断点,运行了gdb7.4,并将其附加到一个进程 Gdb点击了断点,我运行了几个步骤,Gdb报告了以下错误(带有粗体文本): (gdb)b[功能名称] 0xf1f28a49处的断点1:file../../../../../../../../[文件名].cpp,第167行。 0xf1f2dae5处的断点2:file../../../../../../../../../../[文件名].cpp,第60行。 警告:设置了多个断点。 使用“删除”命令删除不需要的断

我在一个共享库(.so)的函数中添加了两个断点,运行了
gdb7.4
,并将其附加到一个进程

Gdb点击了断点,我运行了几个步骤,Gdb报告了以下错误(带有粗体文本):

(gdb)b[功能名称]
0xf1f28a49处的断点1:file../../../../../../../../[文件名].cpp,第167行。
0xf1f2dae5处的断点2:file../../../../../../../../../../[文件名].cpp,第60行。
警告:设置了多个断点。
使用“删除”命令删除不需要的断点。
(gdb)c
继续。
[新线程0xcaafab90(LWP 28480)]
[线程0xcaafab90(LWP 28480)已退出]
[新线程0xcaafab90(LWP 29558)]
[新螺纹0xc8cb6b90(LWP 29980)]
[切换到线程0xc8cb6b90(LWP 29980)]

断点2,[函数名](ostr=…,clientResponse=…,httpProtocol=…,>reqType=…)位于../../../../../../../../[文件名].cpp:60
60../../../../../../../[文件名].cpp:没有这样的文件或目录。
在../../../../../../[文件名].cpp中
(gdb)ni
0xf1f2daed 60 in../../../../../../../[文件名].cpp
(gdb)n

断点1,[函数名](ostr=…,clientResponse=…,httpProtocol=…,>closeConn=…,asynchResponse=…,reqType=…)
位于../../../../../../../[文件名].cpp:167
167英寸../../../../../../../[文件名].cpp
(gdb)n
警告:
无法插入断点0。
访问内存地址0x36cc6dde时出错:输入/输出错误。


/lib/libc.so.6中的siglongjmp()中的0xf7082771
(gdb)

这是
/proc/[PID]/maps
的输出:

08048000-08146000 r-xp 00000000 08:03 293876

08146000-08150000 rw-p 000fe000 08:03 293876

08150000-099c8000 rw-p 08150000 00:00 0
[堆]
c21f9000-c21fa000---p c21f9000 00:00 0
c21fa000-c29fa000 rwxp c21fa000 00:00 0
c29fa000-c29fb000---p c29fa000 00:00 0

f1e1b000-f1e24000 rw-p f1e1b000:00 0
f1e24000-f2093000 r-xp 00000000 08:03 295549
.so
f2093000-f2094000---p 0026f000 08:03 295549
.so
f2094000-f2098000 r--p 0026f000 08:03 295549
.so
f2098000-f209c000 rw-p 002730008:03 295549
.so
f209c000-f209d000 rw-p f209c000:00 0

我的问题是:

  • Gdb无法为
    ni
    命令插入内部断点,但如果文本部分位于
    0xf1*******
    ,它为什么要尝试访问地址
    0x36cc6dde
    ?如您所见,映射输出中不包括该地址

  • 更一般的问题是,我被告知共享库从
    0x40000000开始,但为什么在我的环境中不是这样呢


  • 共享库是使用
    -fPIC
    编译的。我在上面的跟踪中隐藏了一些符号名称。

    这可能与。请尝试一下最新的FSF GDB头(可从以下网站获得):git://sourceware.org/git/gdb.git).

    这可能与。请尝试一下最新的FSF GDB头(可从以下网站获得):git://sourceware.org/git/gdb.git).

    0xc0000000以上的Mmm addresess通常是内核映射的地址。为什么您的进程在用户空间中使用这些地址?0xc0000000以上的Mmm addresess通常是映射内核的地址。为什么您的进程在用户空间中使用这些地址?