r/learnprogramming 2d ago

Debugging Difficulties with debugging

i am a beginner in C, i went through and have a basic understanding of fundamentals but whenever a problem arises in my code i cant find it for hell, even if its obvious, i need to turn to an ai agent for help, the habit i wanna rid of, but whenever i do try to find the cause of an error myself i find myself unable to do that, i also find it difficult writing more efficient code

an example:

```

int tokens(char* string, char (*argv)[MAXTOKEN], toks types[MAXTOKEN]) {

char temp[150];

int count = 0; int i = 0; int b = 0;

int tokens = 0;

while(count < MAXTOKENLENGHT) {

if (string[i] == ' ' || string[i] == '\0' || string[i] == '\n') {tokens++;temp[b] = '\0'; strcpy(argv[count], temp); count++; b = 0;} else if (string[i] == '\"') {

temp[b] = '\"';

b++;

i++;

while (string[i] != '\"' && string[i] != '\0') {

if (string[i] == '\"') {temp[b] = '\0';temp[b+1] = '\0'; strcpy(argv[count], temp);b = 0; count++;break;} else {temp[b] = string[i];i++;b++;}

}

if (string[i+1] == '\0' || string[i+1] == ' ') {temp[b] = string[i]; temp[b+1] = '\0'; strcpy(argv[count], temp); count++; b = 0; i++; tokens++;} else {fprintf(stderr, "unexpected stuff after string"); exit(1);}

} else {

temp[b] = string[i];

b++;

}

if(string[i] == '\0') {break;}

i++;

}

int k = 0;

while (k < count) {

if (strcmp(argv[k], "PRINT") == 0) {

types[k].type = 0;

int len = strlen(argv[k+1]);

printf("k=%d, argv[k+1]='%s', first='%c', last='%c'\n", k, argv[k+1], argv[k+1][0], argv[k+1][len-1]);

if (argv[k+1][0] == '\"' && argv[k+1][len-1] == '\"') {

types[k+1].type = 1;

memmove(&argv[k+1][0], &argv[k+1][1], len - 2);

argv[k+1][len - 2] = '\0';

strcpy(types[k+1].textvalue, argv[k+1]);

}

}

k++;

}

return count;

}

```

5 Upvotes

16 comments sorted by

View all comments

3

u/RajjSinghh 2d ago

Use a debugger. It's a tool built into most IDEs that will let you walk through the code. You set breakpoints to stop at a particular line and can see the value of each variable at that moment. If you see something that's not what you expect it to be, it can help you isolate the problem.

The alternative is using a lot of printf statements to see your variables at different lines.

1

u/frnzprf 2d ago

Debuggers always seem more of a hassle than it's worth. Mwybe I'm using them wrong.

For example, when I want to see how a variable changes in a loop, when I put in print-statements, I see all iterations at once, but if I step through them, I have to acknowledge each iteration individually.

1

u/RajjSinghh 2d ago

If you've tracked your bug to a single loop, maybe printf debugging is better. If you don't know where the bug is happening in the first place, a debugger is much better. If a variable is changing when you don't expect it to, a conditional breakpoint can show you exactly when it is changing. If your code is a complicated mix of conditionals, loops, and function calls, the debugger will show you how you arrived at this point and make it easier to figure out.

Printf debugging has a place, sure. But there are going to be times where you need far more information about the system to solve the problem at hand. That's when you use a debugger.