【问题标题】:next command in gdb is not working correctlygdb 中的下一个命令无法正常工作
【发布时间】:2013-04-16 01:55:17
【问题描述】:

我只是简单地使用 gdb 逐行遍历代码以了解它是如何工作的以及它在做什么。我第一次这样做时效果很好,但现在下一个命令无法正常工作。有时向前,有时向后。这没有意义。每次我这样做时,它似乎都是相同的模式。下面是一个例子。有谁知道怎么回事?

注意:这是一台带有旧程序版本的旧 Mac(我无权更新)

请明确。总的来说,我对 linux 和编程还很陌生。

谢谢!

Reading symbols for shared libraries ... done
(gdb) b main
Breakpoint 1 at 0x2730: file ../../../../gcc-3.4.6/libf2c/libF77/pow_zi.c, line 14.
(gdb) r
Starting program: /Users/kevin/project/ConstU/main 
nReading symbols for shared libraries +. done
Error in re-setting breakpoint 1:
Function "main" not defined.
Re-enabling shared library breakpoints: 1

Breakpoint 1, 0x00002730 in main () at main.c:34
34      {
(gdb) n
main () at main.c:42
42      for (i=0;i<DpDIM;i++) {
(gdb) n
34      {
(gdb) n
35      runstart=clock();
(gdb) n
39      Init=ReadInit(&CaseDim);/*reads in initial valies from initfile*/
(gdb) n
35      runstart=clock();
(gdb) n
39      Init=ReadInit(&CaseDim);/*reads in initial valies from initfile*/
(gdb) 

【问题讨论】:

  • 你用什么命令来编译你正在单步执行的程序?
  • 对不起,我不知道如何使它更具可读性,但我认为 gcc -g -O2?这是make文件的一部分:CC = gcc; CFLAGS = -g -O2;主.o:主.c; $(CC) $(CFLAGS) -c $

标签: gdb next


【解决方案1】:

有人知道怎么回事吗?

您描述的症状在调试使用优化构建的程序时非常很常见:编译器重新排列代码以使来自不同行的指令混合在一起。

确保编译时没有任何 -O 标志,或在编译行末尾添加 -O0

这是制作文件的一部分:CC = gccCFLAGS = -g -O2

这样就可以了:删除-O2,你的调试会变得更容易。

【讨论】:

  • 成功了。奇怪...我查看了它,并在手册中找到了这一行:“与大多数其他 C 编译器不同,GCC 允许您将 -g 与 -O 一起使用。”谢谢!
  • GCC 确实 允许您同时使用-g-O,使调试优化代码成为可能。但这并不能让它简单
猜你喜欢
  • 1970-01-01
  • 2021-08-17
  • 1970-01-01
  • 2015-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多