我正在尝试更改GDB中的变量值。我不确定如何正确地做到这一点。我在谷歌搜索但无法得到正确的答案。
这是我正在尝试的
(gdb) run set number = 4 **<---- here i try to set the number to 4**
The program being debugged has been started already.
Start it from the beginning? (y or n) y
Starting program: /u/data/u3/msehgal/Desktop/CS252/lab1-src/debug set number = 4
warning: Could not load shared library symbols for linux-vdso.so.1.
Do you need "set solib-search-path" or "set sysroot"?
Breakpoint 1, main (argc=5, argv=0x7fffffffe4f8) at public.c:19
19 printf ("Starting tests.\n");
(gdb) n
Starting tests.
20 fflush (stdout);
(gdb) n
22 initialize_array ();
(gdb) n
Program received signal SIGSEGV, Segmentation fault.
0x0000000000400ce8 in initialize_array () at public.c:40
40 numbers[i] = i + 1;
(gdb) print numbers
$3 = (int *) 0x0 **<---- on re-run the number is still 0**
(gdb)
答案 0 :(得分:1)
首先确保您尝试设置的变量在当前范围内。
比你应该使用
(gdb) set variable i = val
您可以查看是否已使用
进行更新(gdb) p i
我认为你没有使用上面的variable
。
因为set命令有许多可能与之冲突的子命令 程序变量的名称,使用该集合是一个好主意 变量命令而不仅仅是设置。
答案 1 :(得分:0)
结果看起来变量numbers
未初始化为数组,因此地址为0x00,并且您的程序尝试使用未初始化的数组,因此导致分段错误。
在你的gdb案例中,你犯了几个错误:
set var number=4
number
而不是numbers
,因此numbers
不会更改。