2014-03-25 29 views
1

我有一个Python代码调用C编写的共享库(并编译调试信息与标志:-g -O0 -Wall -fPIC)。 我想用gdb进入c代码。我执行以下操作:gdb发现调试信息,但不能把断点

  • 我从终端调用python代码,并在内部调用import pdb; pdb.set_trace()代码。
  • 我的过程中重视gdb到Python进程

当我与gdb附加的PID,对系统库的一些调试信息都没有找到(明显),但我的共享库的调试信息,找到。当我尝试把一个断点到的话,我写b filename.c:30源文件中的一个,但gdb说,它不能访问内存:

Cannot access memory at address 0x128a 

可能的原因是我编的库icc和我在调试gdb? 如果我会有点惊讶,因为我已经成功地调试了其他与intel编译的程序gdb

有什么想法?


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

EDIT2: 我对这样的事实感到困惑,如果我写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 [email protected] 
(gdb)break f 
Cannot access memory at address 0x124a 
+0

这将帮助,如果你表现出确切的错误。如果gdb可以正确“列表”,这意味着它正在查找debuginfo。错误表明内核可能拒绝了这个请求;或者debuginfo中有一些错误。 –

+0

@TomTromey我编辑了我的问题 – simona

回答