Hi,
I rarely use software debuggers.
I often use the hardware for debugging.
Like I2C:
Write a piece of code. Maybe I2C_START and I2C_STOP.
then test this by sending the START conditionn when an input pin (maybe connected to a pushbutton) goes LOW ....and STOP when pin goes HIGH.
Use a scope to check SCL and SDA. Look for timing , signal levels, rise time, fall time...whatever is specified in the I2C_specification_sheet for both conditions.
Then program the next piece of code. Maybe sending the ADDRESS_byte.
check timing levels and so on ... also check ACK with connected device and unconnected device... check the difference.
Then program the next piece of code. Writing to the I2C device - check - then reading from the I2C device -check - then REPEATED_START - check -
Then combine all for a complete device wirte/read access - check -...
In any case... I recommend to use a piece of paper and a pencil and write down what you expect to see ... before you see the first scope picture.
This ensures that you have a good expectation of what yo want to see .. and thus you better recognize what not is like expected.
Klaus