2013-04-23 109 views
1

我只是简单地使用gdb逐行地逐行检查代码,以了解它是如何工作的以及它在做什么。第一次做到这一点时它运行良好,但现在下一个命令不能正常工作。有时它往前走,有时往后退。这没有意义。每次我这样做,似乎都是一样的模式。下面是一个例子。任何人都知道什么是错的?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/kevinsanchez/epeace/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) 
+0

你使用什么命令来编译你正在使用的程序? – giogadi 2013-04-23 01:31:11

+0

对不起,我不知道如何使这个更具可读性,但我认为gcc -g -O2? 这里是make文件的一部分: CC = gcc; CFLAGS = -g -O2; main.o:main.c; $(CC)$(CFLAGS)-c $ <; – kevin 2013-04-23 01:39:27

回答

3

任何人都知道什么是错的?

你描述的症状与调试优化内置程序时都非常常见:以这样的方式,从不同的线路指示变得混杂的编译器重新排列代码。

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

这里是make文件的一部分:CC = gccCFLAGS = -g -O2

这将做到这一点:去除-O2和你的调试会去要容易得多。

+0

它工作。奇怪......我研究了这一点,并在手册中找到了这一确切的一行:“与大多数其他C编译器不同,GCC允许您将-g与-O一起使用。”谢谢! – kevin 2013-04-23 01:54:37

+1

GCC *确实*允许您一起使用'-g'和'-O',使调试优化的代码成为可能。但这并不容易*。 – 2013-04-23 02:42:06

相关问题