获得的回溯的奇怪行为,传递的变量值在接收器方法中得到改变,从获得的回溯中可以看出

时间:2014-02-14 14:26:54

标签: c gdb stack-trace callstack backtrace

使用gdb进行调试时,程序遇到了奇怪的行为。下面提到的是我的程序从核心的回溯。当我从第4帧到第3帧(#4到#3)遍历程序时,我看到一种奇怪的行为。

(gdb) bt
#0  0xb76b5a29 in memset ()
#1  0xb786e916 in calloc (mem=429496, size=8)
#2  0xb788db57 in fetch_vals (bt_ptr=0x818776c, num_bt=135831740, txn=0xb24dd750)
#3  0xb788ffe2 in build_list (pol_id=0, txn=0xb24dd750)
#4  0xb788bc7f in request (fields=0xb5320c90, attrs=0x0)
#5  0xb789c214 in process_ipc (fd_info=0x80cff9c, msg=0xb5320c60, opq=0xb249bfd0)
#6  0xb77acd04 in process_recv (fd_info=0x80cff9c, arg=0x0, flags=0)
#7  0xb77a7385 in main (arg=0x8070db4)
#8  0xb76451e8 in __pthread_initialize ()
#9  0xb770172a in clone ()
传递给 build_list()方法的变量 pol_id request()方法中定义的局部变量。我没有在调用或调用方法中的任何地方修改此变量。然而,在查看回溯时,我发现它的值有时会因为程序失败而被清除为0。如果我查看#3,其收到为0( build_list(pol_id = 0,txn = 0xb24dd750)),这是显而易见的。

下面提到的是堆栈第4帧的“info local”( request() ),我们可以看到 pol_id = 2的值

(gdb) f 4
#4  0xb788bc7f in request (fields=0xb5320c90, attrs=0x0)
274         req = build_list(pol_id, &txn);
(gdb) info local
req = (request *) 0x1
resp = (response *) 0x0
txn = {pol_set_id = 2, flags = 0, fields = 0xb5320c90}
pol_id = 2
__FUNCTION__ = "request"
(gdb)

任何人都可以请指出为什么会发生这种情况?我检查了我的程序,并没有修改pol_id变量。

感谢。

0 个答案:

没有答案