Warum funktioniert Debugging nicht mehr?

  • C#

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von hal2000.

    Warum funktioniert Debugging nicht mehr?

    Vielen Dank für das reinschauen und hier ist meine Frage:

    seit ich eine Funktion geschrieben habe, die ihr unten findet, geht steppen nicht mehr. könnt ihr mir helfen?

    danke im vorraus.

    Quellcode

    1. void exportieren()
    2. {
    3. APLFertigung.Master.Prj3Src.Bereich_DF.WarteFenster wf = new APLFertigung.Master.Prj3Src.Bereich_DF.WarteFenster(dataGridAnzeige.Columns.Count - 1);
    4. wf.Show();
    5. Microsoft.Office.Interop.Excel.Application excelApp = new Microsoft.Office.Interop.Excel.Application();
    6. const int xlWBatWorkSheet = -4167;
    7. Microsoft.Office.Interop.Excel.Workbook newWorkbook = excelApp.Workbooks.Add(xlWBatWorkSheet);
    8. Microsoft.Office.Interop.Excel.Worksheet excelSheet = (Microsoft.Office.Interop.Excel.Worksheet)newWorkbook.Worksheets[1];
    9. excelSheet.Name = "Defekte_Export";
    10. for(int i = 0; i < dataGridAnzeige.Columns.Count; i++)
    11. {
    12. excelSheet.Cells[1, i + 1] = dataGridAnzeige.Columns[i].Name;
    13. excelSheet.get_Range(((MyEnumChar)i + 1).ToString() + 1, Type.Missing).Font.FontStyle = "Fett";
    14. wf.progressBarStatus(i + 1, "Excel-Datei wird erstellt...");
    15. for(int j = 0; j < dataGridAnzeige.Rows.Count - 1; j++)
    16. excelSheet.Cells[j + 2, i + 1] = dataGridAnzeige.Rows[j].Cells[i].Value.ToString();
    17. }
    18. excelApp.Visible = true;
    19. System.Data.OleDb.OleDbDataReader drReader = null;
    20. string sSQL = "", sErrText = "";
    21. wf.progressBarStatus(0, "Datenbank wird aktualisiert...");
    22. for(int j = 0; j < dataGridAnzeige.Rows.Count - 1; j++)
    23. {
    24. sSQL = "update auftr_defekte set ExpStatus = '" + (Convert.ToInt32(dataGridAnzeige.Rows[j].Cells["ExpStatus"].Value) + 1).ToString() + "' " +
    25. "where ZettelNr= '" + dataGridAnzeige.Rows[j].Cells["ZettelNr"].Value + "'";
    26. Protokoll.Write(sSQL);
    27. drReader = Globals.Params.Connection_HOMAG.SQLSelect(sSQL, ref sErrText);
    28. drReader.Close();
    29. }
    30. drReader.Dispose();
    31. Arbeiten_DekoFehler_Activated(null, null);
    32. wf.Close();
    33. }

    EugenIS schrieb:

    geht steppen nicht mehr.
    Wie äußert sich das?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Er will restart oder edit.

    das problem ist nur, dass normallerweise so eine meldung nur dann kommt, wenn fehler im code vorhanden ist. sonst geht steppen.

    in meinem jetztigen stand kann ich leider nur alle änderung zurück machen. selbst so etwas wie lehrzeile, was den code normallerweise garnicht stört geht nicht...
    Ging das schon mal richtig?
    Hast Du den Rechner gewechselt? (32 / 64 Bit)?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    das ging alles. ich vermute dass es an diesen zeilen liegt:

    Microsoft.Office.Interop.Excel.Application excelApp = new Microsoft.Office.Interop.Excel.Application();
    const int xlWBatWorkSheet = -4167;
    Microsoft.Office.Interop.Excel.Workbook newWorkbook = excelApp.Workbooks.Add(xlWBatWorkSheet);
    Microsoft.Office.Interop.Excel.Worksheet excelSheet = (Microsoft.Office.Interop.Excel.Worksheet)newWorkbook.Worksheets[1];
    excelSheet.Name = "Defekte_Export";


    aber ich kann nicht auf die verzichten... geht nicht. wenn ich die funktion auskommentiere, dann läuft alles wieder wie gehabt...
    Es kann sein, dass die Interopassembly optimiert wurde (=Release-Version). Wenn das der Fall ist, gibt es dafür keine ausführlichen Debugsymbole, sodass der Debugger nach den Aufrufen den Stackframe nicht mehr findet. Damit hat sich dann auch das Steppen erledigt. Normalerweise steht dann im "Auto"-Fenster für einige Werte, dass der aktuelle Code optimiert wurde. Alternativ wird dir die Disassembly angeboten.

    Abhilfe: Erzeuge deine Interopassemblies selbst (AxImp oder TlbImp) und debugge nicht im Release-Modus (was die Optimierungen deaktivieren sollte). Kontrolliere das am besten in den Build-Optionen. Irgendwo dort gibts auch die Option "Full Debug Info" (oder ähnlich). Die sollte zum Debuggen aktiviert sein. Falls das alles nicht hilft, kannst du noch versuchen, die benötigten Interoptypen selbst zu deklarieren.
    Gruß
    hal2000