Wie debugge ich richtig?
-
Hallo
Habe ein Programm geschrieben, das eine text.txt datei an einem Drucker druckt.
Doch das programm funktioniert nicht, sobald ich die datei angebe welche gedruckt werden soll, stürzt das programm ab.
Hab noch nie etwas debuggt, hab eben gesucht und im forum kein hilfreichen thread gefunden.
Ich arbeite mit eclipse CDT. Debugger verwende ich den von MinGw.
ANSI C Kenntnisse sind nicht allzugross/mu
-
es gibt verschiedene möglichkeiten zu debuggen. zu deinem MinGw debugger kann ich dir nichts sagen, weil ich den nicht kenne.
im prinzip sind die aber alle ähnlich: man lässt das programm im debug modus laufen und kann mit einer bestimmten taste( von debbuger zu debugger verschieden ) zeile für zeile den quellcode durchgehen und sich die inhalte der variablen anzeigen lassen usw.
man kann aber auch ohne debugger debuggen, indem man kotrollausgaben auf der konsole macht und so die fehlerhafte zeile indetifiziert.
ansonsten wäre es hilfreich, wenn du den quellcode hier reinkopieren könntest, falls es nicht allzu viel ist.
-
der quellcode ist relativ gross(für meine verhältnisse)
184 zeilen
na gut
/* * @author mu * Date 13.02.2008 * * File drucker.c * * Description * Formatierter Druck von Textdateien * */ /*------ include files */ #include <stdio.h> #include <string.h> #include <stdlib.h> /*------ define */ #define SEITENLAENGE 65 /* PCL-Steuerzeichen für Schmalschrift */ #define SCHMAL "1B2873313648" /* Steuerzeichen für Seitenvorschub */ #define NEUE_SEITE "0c" /* PCL-Steuerzeichen für normale Schrift */ #define NORMAL "1B2873313248" /* maximale Zeilenlänge */ #define MAX_EINGABE 200 FILE *text; /* Druckausgabe */ /* * Funktion : left_margin * * Aufgabe : Leerzeichen für Zeilenanfang * Parameter : Anzahl der Leerstellen * Returnwert : keinen * */ void left_margin(int rand) { while(rand-- > 0) { fprintf(text,"%c",32); /* 32 = ASCII-Code für Leerzeichen */ } } /* * Funktion : kopfzeile * * Aufgabe : Kopfzeilenausgabe einer Liste * Parameter : 1) Name der zu druckenden Datei * 2) Abstand vom Linken Rand * Returnwert : keinen * */ void kopfzeile(char *dateiname, int linker_rand) { static int seite = 1; fprintf(text,"\n"); /* Eine Leerzeile vor Druckbeginn */ left_margin(linker_rand); fprintf(text,"<<< Seite %3i >> von %s\n\n", seite++,dateiname); } /* * Funktion : steuerzeichen * * Aufgabe : Steuerzeichen an Drucker Senden * Parameter : Escapesequenz * Returnwert : keinen * */ void steuerzeichen(char *seq) { char wert; while(*seq) /* Lies die gesamte Steuersequenz */ { fprintf(text, "%c", wert); seq += 2; } } /*------ Hauptprogramm */ int main() { FILE *stream; char dateiname[67]; /* Zu druckende Datei */ int zeile = 0; /* aktuelle Druckzeile */ int linker_rand = 10; /* linke Randgrösse */ char schmal = 'J'; /* Schmalschrift J/N ? */ char eingabe[MAX_EINGABE]; /* Dialogzeile */ printf("\n\t\t<<< Formatierter Druck >>"); printf("\n\n <RETURN> beendet das Programm.\n"); /*------ Dateinamen einlesen und öffnen */ printf("\nWelche Datei drucken?\n>"); gets(dateiname); if(strlen(dateiname) == 0); { exit(0); } while((stream = fopen(dateiname, "r")) == NULL) { printf("'%s' nicht gefunden!\a\n",dateiname); printf("\nWelche Datei drucken?\n> "); gets(dateiname); if(strlen(dateiname) == 0) { exit(0); } } /*------ Druckparameter einlesen */ printf("\n<RETURN> uebernimmt die Vorgaben\n"); printf("\nLinker Rand (%i): > ", linker_rand); gets(eingabe); if(strlen(eingabe) != 0) { linker_rand = atoi(eingabe); } printf("\nSchmalschrift J/N (%c): > ",schmal); gets(eingabe); if(strlen(eingabe) != 0) { if(eingabe[0] == 'N' || eingabe[0] == 'n') { schmal = 'N'; } } /*------ Druckausgabe öffnen */ text = fopen("LPT1:","a"); if(text == NULL) { printf("Fehler beim Oeffnen von LPT1"); exit(1); } /*------ Schriftart erstellen */ if(schmal == 'J') { steuerzeichen(SCHMAL); } else { steuerzeichen(NORMAL); } /*------ Liste drucken */ kopfzeile(dateiname, linker_rand); while(fgets(eingabe,MAX_EINGABE,stream) != NULL) { left_margin(linker_rand); fprintf(text,"%s",eingabe); if(++zeile > SEITENLAENGE -10) { steuerzeichen(NEUE_SEITE); kopfzeile(dateiname,linker_rand); zeile = 0; } } steuerzeichen(NEUE_SEITE); /*------ Datei schliessen */ fclose(stream); printf("\nDruck beendet!\a\n"); system("PAUSE"); return 0; }
-
bei mir stürzt nix ab, wenn ich ne datei eingebe.
allerings wir auch nichts gedruckt.
-
ich bin hier in der Firma, haben halt mehrer drucker.
Vielleicht liegts daran?easy progging bei dir druckts auch nichts?
- ich schau mir den code 'nochmal' genau an. melde mich dann wieder.
Kleiner Edit noch:
Wenn ich Debuggen will in Eclipse kommt folgende Fehlermeldung:
(Mein Workspace heisst wirklich "c workspace")"C:\c workspace\Drucker Projekt": Invalid argument.