2013-04-23 108 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

相關問題