【问题标题】:gdb finds debugging information but cannot put breakpointgdb 找到调试信息但不能放断点
【发布时间】:2014-05-03 20:07:40
【问题描述】:

我有一个 python 代码正在调用一个用 C 编写的共享库(并使用带有标志的调试信息编译:-g -O0 -Wall -fPIC)。 我想用gdb 进入c 代码。我执行以下操作:

  • 我从终端调用 python 代码,并在代码中调用import pdb; pdb.set_trace() 进行内部步骤。
  • 我将gdb的进程附加到python进程的pid

当我用gdb附加时,没有找到一些关于系统库的调试信息(很明显),但是找到了我的共享库的调试信息。当我尝试将断点放入so的源文件之一时,我写了b filename.c:30,但gdb说它无法访问内存:

Cannot access memory at address 0x128a

可能是因为我用icc 编译了库,而我正在调试gdb? 万一我有点惊讶,因为我已经用gdb成功调试了其他用intel编译的程序。

有什么想法吗?


编辑: 我已经用 gcc 重新编译了,我仍然有这个问题。我在想,为了放置断点,我需要共享库中函数的名称,我猜它有一个前缀,比如lib.function。我怎么知道那个前缀?

编辑2: 我很困惑,如果我写list <name of function>gdb 会显示与函数对应的正确源代码


编辑:

按照我打开gdb并输入以下命令的答案之一:

(gdb)info functions f 
All functions matching regular expression "f":

File ../source/ffile.c:
double f(double, double, double, double, double);

Non-debugging symbols:
0x0000000000000a68 f@plt
(gdb)break f
Cannot access memory at address 0x124a

【问题讨论】:

  • 如果您显示确切的错误会有所帮助。如果 gdb 可以正确“列出”,则意味着它正在查找调试信息。该错误表明内核可能正在拒绝该请求;或者调试信息中有一些错误。
  • @TomTromey 我编辑了我的问题

标签: python c debugging memory gdb


【解决方案1】:

可能有两个原因:

【讨论】:

  • “库尚未映射”是什么意思?我已经更新了我的问题
猜你喜欢
  • 1970-01-01
  • 2015-03-23
  • 1970-01-01
  • 2012-05-27
  • 2012-09-08
  • 2015-03-01
  • 2021-08-31
  • 1970-01-01
相关资源
最近更新 更多