Eclipse Debugging With Pointers and Arrays
In this tutorial, we will show you how to effectively debug pointers and arrays in C using the Eclipse IDE.
Join the DZone community and get the full member experience.
Join For FreeIn the C programming language, it is good practice to pass values by reference (using a pointer), especially for a large set of data. For example, the following function takes a message string and pointer to integer data. It is then printed to the console, as shown below:
static void printData(const char *msg, const int *intBuf, size_t bufSize) {
puts(msg); /* print message */
for(int i=0; i<bufSize;i++) {
printf("buf[%i] = %i\n", i, intBuf[i]);
}
}
I can also use it as below:
static int intArray[] = {0, 1, 2, 3, 4, 5};
printData("int buf Data dump", intArray, sizeof(intArray)/sizeof(intArray[0]));
Then, it prints something like this into the console:
int buf Data dump
buf[0] = 0
buf[1] = 1
buf[2] = 2
buf[3] = 3
buf[4] = 4
buf[5] = 5
Now, so far so good. Readers familiar with the C/C++ programming language know that pointers and arrays are kind of interchangeable — a pointer to an element can always be treated as a pointer to an array of elements. As with the code above, the function printData()receives two pointers. These are actually pointers to arrays.
In Eclipse/CDT, the MCUXpresso IDE 10.2 is based on Eclipse Oxygen, but it is pretty much the same as any other Eclipse version. When debugging the function printData() in Eclipse/CDT, the parameters are displayed as normal pointers. This happens because of what the function has received and/or knows about it.

Debugging Pointers
Dereferencing the pointer in the Variables view will only show the first element:

first array element
But, how can we see the full array in the debugger? For a pointer to a character, the debugger can show the string (or array of char):

char array pointer
See Eclipse Debugging with Strings and Eclipse Debugging with Strings - Part 2 for a detailed discussion about how to debug string with Eclipse.
Also, for pointers to other data types, Eclipse recognizes that the address matches the intArray memory object:

intArray
How can you see the array behind that pointer? For this, there is a context menu to display a pointer as an array:

Display as Array
Because the size of the array is not defined, I can specify the length of the array to be displayed as:

Display as Array Dialog Box
And, voilà:

Array Values
Obviously, it will show 'random' values, if I decide to show more data elements than the array really has defined.
To go back and show the normal pointer again, I can restore the original type:

Restore Original Type
And, that's it! Happy arraying!
Published at DZone with permission of Erich Styger. See the original article here.
Opinions expressed by DZone contributors are their own.
Comments