python - gdb 找到调试信息但不能下断点

标签 python c debugging memory gdb

我有一个 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 .

有什么想法吗?


编辑: 我已经用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

最佳答案

可能有两个原因:

关于python - gdb 找到调试信息但不能下断点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22643775/

相关文章:

python - 在python中这个定义是什么样的变量?

python - Azure 容器应用程序能否从 0 变得更像 azure 函数?

Codeforces 输出不同的东西

c - 在 64 位环境中将 32 位十六进制读入 long

C++ int 限制的提升动机

c - C语言中可以修改char字符串吗?

python - 在 Python basemap 上重绘绘图

ruby - 欧拉计划 #50 - 连续素数和 - Ruby

php - 在 symfony 中以交互方式启用 Debug模式

python - 使用 'OR' 选择 pandas 中的数据