无法在 gdb 中设置断点
Posted
技术标签:
【中文标题】无法在 gdb 中设置断点【英文标题】:Couldn't make breakpoint in gdb 【发布时间】:2013-01-23 13:50:46 【问题描述】:我使用 openSUSE 作为我的操作系统和 gdb 7.5。我想用 gdb 和断点调试我的程序。但是当我下断点,然后运行我的程序时,gdb 会通知我如下:
Error in re-setting breakpoint 1: malformed linespec error: unexpected string, ".cpp"
在我所有的程序中都是一样的。此外,当运行到断点时,程序根本不会停止。谁能告诉我怎么了?
我下载了最新的gdb并安装它,以前的消息消失了,但是运行gdb时它告诉我:
warning: Could not load shared library symbols for linux-gate.so.1. Do you need "set solib-search-path" or "set sysroot"?
如何解决这个问题?
【问题讨论】:
你使用哪个命令来设置断点? 【参考方案1】:我使用“b + linenumber”
这定义了一个相对于当前行的断点,另见Specifying a Location。使用下面您评论中的代码,以下内容将起作用:
$ gdb ./main
(gdb) b +5
Breakpoint 1 at 0x40139c: file main.cpp, line 6.
(gdb) run
[New Thread 1528.0x1930]
Breakpoint 1, main () at main.cpp:5
5 while(scanf("%d%d",&a,&b)!=EOF)
除非有充分的理由指定相对行号,否则我建议您使用绝对行号或函数名:
(gdb) b main
Breakpoint 1 at 0x401395: file main.cpp, line 3.
(gdb) b main.cpp:6
Breakpoint 1 at 0x40139c: file main.cpp, line 6.
【讨论】:
感谢您的回复。我尝试您的代码没问题。但是考虑以下我使用的简单代码(请原谅我第一次使用 ***)我还收到消息“重新设置断点 1 时出错: 格式错误的 linespec 错误: 意外字符串, ".cpp" #includeforgive my first using ***
- 没问题 :) 如果您有其他信息来澄清您的问题,最好编辑问题并将其添加到那里而不是在评论中(尤其是代码非常难在 cmets 中读取)。 我们还需要一个用于设置断点的命令。【参考方案2】:
gdb 7.5 中有一个已知错误,当源文件名以十进制数字开头时,调试器无法解析 linespec。详情请见this message。
尝试重命名文件并从您的分发存储库更新 gdb。如果错误仍然存在,请向您的发行版维护人员提交错误。
查看来自bug report 提交给gdb
bugzilla 的示例会话。
(gdb) b 3
Breakpoint 1 at 0x4004c3: file 2.c, line 3.
(gdb) r
Starting program: /home/teawater/tmp/a.out
Error in re-setting breakpoint 1: malformed linespec error: unexpected string, ".c"
Error in re-setting breakpoint 1: malformed linespec error: unexpected string, ".c"
Error in re-setting breakpoint 1: malformed linespec error: unexpected string, ".c"
Error in re-setting breakpoint 1: malformed linespec error: unexpected string, ".c"
【讨论】:
谢谢。我试图重命名文件并且消息消失并且断点有效。非常感谢。 我下载了最新的gdb并安装它,以前的消息消失了,但是当运行gdb时它告诉我:警告:无法加载linux-gate.so.1的共享库符号。你需要“set solib-search-path”还是“set sysroot”?如何解决这个问题?linux-gate.so.1
不是真正的库,而是内核导出的虚拟库。在 64 位系统和更高版本的内核上,它被替换为 linux-vdso.so.1
。看起来像是 libc 不兼容。以上是关于无法在 gdb 中设置断点的主要内容,如果未能解决你的问题,请参考以下文章