Unless I am mistaken, -var-set-update-range does not seem to have any affect on children that are updated. Consider the following program: #include <stdio.h> int main(int argc, char *argv[]) { int i; int arr[512]; printf("Starting up\n"); for(i=0;i<512;i++) arr[i] = 3; printf("Assigned %d\n", i); return 0; } When I run the program via gdb, I'm using the following sequence of commands via mi2: ===== (gdb) start ... plenty of output ... (gdb) -var-create v1 * arr ^done,name="v1",numchild="512",value="[512]",type="int [512]",thread-id="1",has_more="0" (gdb) -var-list-children v1 0 2 ^done,numchild="2",children=[child={name="v1.0",exp="0",numchild="0",type="int",thread-id="1"},child={name="v1.1",exp="1",numchild="0",type="int",thread-id="1"}],has_more="1" (gdb) break main.c:13 ... plenty of output ... (gdb) cont ... plenty of output, break reached after loop ... (gdb) -var-set-update-range v1 0 2 ^done (gdb) -var-update v1 ... every child of v1 is now listed (512 in fact) ... ==== Perhaps I'm missing a detail, but I expect only to see the first to entries of `arr` to be output. I realize the above mixes console and mi2 commmands, but it shouldn't be an issue.