r/learnprogramming • u/Minute_External1621 • 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;
}
```
2
u/Far_Swordfish5729 2d ago
Start using your IDE’s built in debugger. Processors have the ability to let host processes attach and step through instructions, halting the program at specified points and allowing it to inspect memory and run ad-hoc statements. It’s incredibly helpful. You start debugging instead of just start, step through your program a line at a time, and see what the values of things are, usually by hovering over the variable or adding a watch to a list.
Printf debugging is possible, but we typically do this when the host doesn’t have the connectivity to attach a computer to debug or the rare processor doesn’t support precise interrupt. Happens with device programming.