Over a million developers have joined DZone.
{{announcement.body}}
{{announcement.title}}

Eclipse Debugging With Pointers and Arrays

DZone's Guide to

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.

· IoT Zone ·
Free Resource

In 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.

Image title

Debugging Pointers

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

Image title

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):

Image title

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:

Image title

intArray

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

Image title

Display as Array

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

Image title

Display as Array Dialog Box

And, voilà:

Image title

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:

Image title

Restore Original Type

And, that's it! Happy arraying!

Topics:
debugging ,internet of things ,pointers ,arrays ,eclipse ,how-to ,ide ,c

Published at DZone with permission of

Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}