2012-04-25 55 views
0

我通過目前在QT/zlib的錯誤工作設置斷點,我想檢查一個變量是否已損壞它崩潰的前行,所以我使用break 1245但是設置上一行的突破,:GDB不正確的路線

(gdb) info break 
Num  Type   Disp Enb Address What 
6  breakpoint  keep y 0x02cb0e1e in inflateEnd at inflate.c:1245 
breakpoint already hit 6 times 
(gdb) c 
Continuing. 
[Thread 0xb103db70 (LWP 26146) exited] 
[Thread 0xb5a74b70 (LWP 26143) exited] 

Breakpoint 6, inflateEnd (strm=0x86ccdc0) at inflate.c:1246 
1246  if (state->window != Z_NULL) ZFREE(strm, state->window); 

這是它的上段錯誤,而不是我設置的斷點。 gdb中的bug或一些古怪的行爲?

編輯:增加該地區的名單我工作:

(gdb) list 
1241 { 
1242  struct inflate_state FAR *state; 
1243  if (strm == Z_NULL || strm->state == Z_NULL || strm->zfree ==   (free_func)0) 
1244   return Z_STREAM_ERROR; 
1245  state = (struct inflate_state FAR *)strm->state; 
1246  if (state->window != Z_NULL) ZFREE(strm, state->window); 
1247  ZFREE(strm, strm->state); 
1248  strm->state = Z_NULL; 
1249  Tracev((stderr, "inflate: end\n")); 
1250  return Z_OK; 
(gdb) 

編輯:從意見接過建議和使用Ubuntu的從源包(apt-get的源)和建築重建它CFLAGS和SFLAGS被強制爲-O0,但現在它不會返回gdb中的任何行段號,因此我認爲我在某處出錯了。

+1

你用'-O0'構建了嗎? – 2012-04-25 14:48:34

+0

使用系統安裝的zlib和apt-db包,所以我無法完全回答。 – 2012-04-25 14:50:13

+0

什麼*是*行1245? – 2012-04-25 14:54:05

回答

1

這是它的上段錯誤行,而不是我給自己定

這斷點調試優化的代碼(inflate.c有可能的是)時的預期。編譯器移動指令,在執行代碼時執行「跳轉」。