Avatar billede trumf Nybegynder
05. april 2005 - 22:32 Der er 11 kommentarer og
1 løsning

debugge en dll

Hejsa E

Jeg har lavet en dll med en singleton som henter en masse konstanter. Denne dll hentes så frem på de sider der skal bruge de konstanter, men jeg får en fejl på siderne om at
"Object reference not set to an instance of an object"
når jeg referer til en konstant:
string configSingletonErr = ConfigSingleton.Instance().ConfigSingletonErr.ToString();
ovenstående skulle vise den fejl der er i try catch, men når denne fejl kommer, kan jeg jo ikke se den "rigtige" fejl!!!
Der er ikke nogen build fejl når jeg kompilerer dll'en

Hvordan laver jeg en trace eller noget der kan vise mig fejlen ?
Avatar billede arne_v Ekspert
05. april 2005 - 22:49 #1
Umiddelbart kunne man jo godt få den ide at ConfigSingletonErr var null ...
Avatar billede trumf Nybegynder
05. april 2005 - 22:54 #2
Nej det tror jeg ikke for jeg har både initialiseret og instantieret den ved at sætte den string configSingletonErr = "" fra start...
Desuden er det alle variable den gør det med...
Avatar billede arne_v Ekspert
05. april 2005 - 22:56 #3
Så skal vi jo nok lige have checket din ConfigSingleton klasse. Men jeg troede bare
at den havde virket.
Avatar billede trumf Nybegynder
05. april 2005 - 22:57 #4
ja, den har virket fint, indtil jeg fik lavet et eller andet... ;-)
Vil du se alle 2000 linier ?
Avatar billede arne_v Ekspert
05. april 2005 - 23:00 #5
nej tak

Instance metoden + et uddrag af constructor er sikkert nok

2000 linier ????
Avatar billede trumf Nybegynder
05. april 2005 - 23:21 #6
Der er mange konstanter og efterhånden en del funktioner, jeg kan barbere det ned til ca 300:
using System;
using System.Collections;
using MySql.Data.MySqlClient;
using System.Text.RegularExpressions;
using System.Web;
using Microsoft.VisualBasic;
using System.Diagnostics;
using System.IO;

namespace webUtil
{
    public class ConfigSingleton
    {
        private string configSingletonErr = "";
        private string centreret;
        private string farve1;

        private static ConfigSingleton instance;

        private ConfigSingleton()
        {
            Stream myFile = File.Create("Tracer.txt");
            TextWriterTraceListener myTextListener = new TextWriterTraceListener(myFile);
            Trace.Listeners.Add(myTextListener);
            Trace.Write("++++++++++++++++++++++++++Start++++++++++++++++++++++++++");
            Trace.Flush();

            try
            {
                MySqlConnection MyConn = new MySqlConnection(Functions.GetConnStr().ToString());
                string SQLStr = "SELECT * FROM konstanter WHERE kID = 1";
                MySqlCommand cmd = new MySqlCommand(SQLStr, MyConn);
                MyConn.Open();
                MySqlDataReader reader = cmd.ExecuteReader();
                reader.Read();
                egenTop = reader["egenTop"].ToString();
                centreret = reader["centreret"].ToString();
                farve1 = reader["farve1"].ToString();
                ..........
                showcounter = reader["showcounter"].ToString();
                reader.Close();
                MyConn.Close();
            }
            catch(Exception ex)
            {
                configSingletonErr = "1\n" + ex.ToString();


            }

            try
            {
                MySqlConnection MyConn = new MySqlConnection(Functions.GetConnStr().ToString());
                string SQLStr = SQLStr = "SELECT * FROM forretning WHERE fID = 1";
                MySqlCommand cmd = new MySqlCommand(SQLStr, MyConn);
                MyConn.Open();
                MySqlDataReader reader = cmd.ExecuteReader();
                reader.Read();
                aaben = reader["aaben"].ToString();
                firmanavn1 = Regex.Replace(reader["firmanavn1"].ToString(), "'", "'");
                .......
                land = Convert.ToInt32(reader["land"]);
                reader.Close();
                if (firmanavn1 == null)
                {
                    firmanavn1 = "24-7";
                }
                MyConn.Close();
            }
            catch(Exception ex)
            {
                configSingletonErr = "2\n" + ex.ToString();


            }

            try
            {   
                string webID = Convert.ToString(GetWebID());
                string SQLStr = "SELECT * FROM admin WHERE webID = " + webID.ToString();
                MySqlConnection MySConn = new MySqlConnection(Functions.GetSConnStr().ToString());
                testVar = SQLStr;
                MySqlCommand cmd = new MySqlCommand(SQLStr, MySConn);
                MySConn.Open();
                MySqlDataReader reader = cmd.ExecuteReader();
                reader.Read();
                .........
                specialAdm = reader["specialAdm"].ToString();
                reader.Close();
                MySConn.Close();
                if ((aaben == null || aaben == "off") || (open == null || open == "off"))
                {
                    aaben = "off";
                }
            }
            catch(Exception ex)
            {
                configSingletonErr = "3\n" + ex.ToString();
            }

            if (HttpContext.Current.Request.QueryString["lang"] != null) HttpContext.Current.Session["lang"] = HttpContext.Current.Request.QueryString["lang"];
            else HttpContext.Current.Session["lang"] = priLang.ToString();

            if (http_user_agent.IndexOf("opera") >= 0) layerWidth = 162;

            if(wtype < 11)
            {
                layerWidth = 160;
            }
            else
            {
                try
                {
                    MySqlConnection MyConn = new MySqlConnection(Functions.GetConnStr().ToString());
                    div1 = "<div id=\"layer1\">\n";
                    string SQLStr = "SELECT...";
                    MySqlCommand cmd = new MySqlCommand(SQLStr, MyConn);
                    MyConn.Open();
                    MySqlDataReader reader = cmd.ExecuteReader();
                    int antalUnder = 0;
                    if (reader.HasRows)
                    {
                        while(reader.Read())
                        {
                            antalUnder = antalUnder++;
                            div1 = div1 + "<a href=\"txt.aspx?tekstID=" + reader["tekstID"].ToString() + "\">" + reader["overskrift"].ToString() + "</a><br>\n";
                            menu1under = "txt.aspx?tekstID=" + reader["tekstID"].ToString();
                        }
                    }
                    else
                    {
                        div1 = div1 + "<a href=\"forside.aspx\">Ingen sider aktiveret!</a><br>";
                    }
                    div1 = div1 + "</div>";
                    if (antalUnder != 1) menu1under = "y";
                    reader.Close();
                    MyConn.Close();
                }
                catch(Exception ex)
                {
                    configSingletonErr = "4\n" + ex.ToString();
                }
            }

            try
            {
                MySqlConnection MyConn = new MySqlConnection(Functions.GetConnStr().ToString());
                int antalUnder = 0;
                string SQLStr = "SELECT tekstID, overskrift" + HttpContext.Current.Session["lang"] + " AS overskrift FROM tekster WHERE typen = 3 AND aktiv = 'on' AND place = 2 ORDER BY indeks, overskrift" + HttpContext.Current.Session["lang"];
                MySqlCommand cmd = new MySqlCommand(SQLStr, MyConn);
                MyConn.Open();
                MySqlDataReader reader = cmd.ExecuteReader();
                string egenDIV = "\n\n<div id=\"layer2\">\n";
                while(reader.Read())
                {
                    antalUnder = antalUnder++;
                    egenDIV = egenDIV + "<a href=\"txt.aspx?tekstID=" + reader["tekstID"].ToString() + "\">" + reader["overskrift"].ToString() + "</a><br>\n";
                    menu2under = "txt.aspx?tekstID=" + reader["tekstID"].ToString();
                    eDiv = 1;
                }
                if (antalUnder != 1) menu2under = "y";
                reader.Close();
                MyConn.Close();
            }
            catch(Exception ex)
            {
                configSingletonErr = "5\n" + ex.ToString();
            }

            try
            {
                MySqlConnection MyConn = new MySqlConnection(Functions.GetConnStr().ToString());
                int antalUnder = 0;
                int eDiv2 = 0;
                string SQLStr = "SELECT tekstID, overskrift" + HttpContext.Current.Session["lang"] + " AS overskrift FROM tekster WHERE (typen = 5 AND aktiv = 'on' AND activated = 'y')";
                if (specialPage == "y") SQLStr = SQLStr + " OR (typen = 6 AND aktiv = 'on' AND activated = 'y')";
                SQLStr = SQLStr + " OR (typen = 3 AND place = 3 AND aktiv = 'on') ORDER BY indeks, overskrift" + HttpContext.Current.Session["lang"];
                MySqlCommand cmd = new MySqlCommand(SQLStr, MyConn);
                MyConn.Open();
                MySqlDataReader reader = cmd.ExecuteReader();
                string egenDIV2 = "\n\n<div id=\"layer5\">\n";
                string pagename = "";
                if (reader.HasRows)
                {
                    while(reader.Read())
                    {
                        antalUnder = antalUnder++;
                        if (reader["tekstID"].ToString() != "") pagename = reader["tekstID"].ToString();
                        else pagename = "txt";
                        if (wtype < 11)//MENU 2 SHOP
                        {
                            egenDIV = egenDIV + "<a href=\"" + pagename + ".aspx?tekstID=" + reader["tekstID"].ToString() + "\">" + reader["overskrift"].ToString() + "</a><br>\n";
                            eDiv2 = 1;
                        }
                        egenDIV2 = egenDIV2 + "<a href=\"" + pagename + ".aspx?tekstID=" + reader["tekstID"].ToString() + "\">" + reader["overskrift"].ToString() + "</a><br>\n";
                        menu3under = "txt.aspx?tekstID=" + reader["tekstID"].ToString();
                    }
                }
                else
                {
                    egenDIV2 = egenDIV2 + "<a href=\"forside.aspx\">Ingen sider aktiveret!</a><br>";
                }
                if (antalUnder != 1) menu3under = "y";
                reader.Close();
                egenDIV2 = egenDIV2 + "</div>";
                if (eDiv == 0 && eDiv2 == 0) egenDIV = egenDIV + "<a href=\"forside.aspx\">Ingen sider aktiveret!</a><br>\n";
                egenDIV = egenDIV + "</div>";
                MyConn.Close();
            }
            catch(Exception ex)
            {
                configSingletonErr = "6\n" + ex.ToString();
            }

            //MENU 4
            try
            {
                MySqlConnection MyConn = new MySqlConnection(Functions.GetConnStr().ToString());
                int antalUnder = 0;
                string SQLStr = "SELECT...";
                MySqlCommand cmd = new MySqlCommand(SQLStr, MyConn);
                MyConn.Open();
                MySqlDataReader reader = cmd.ExecuteReader();
                if (reader.HasRows)
                {
                    while(reader.Read())
                    {
                        antalUnder = antalUnder++;
                        div4 = div4 + "<a href=\"" + reader["pagename"].ToString() + ".aspx?tekstID=" + reader["tekstID"].ToString() + "\">" + reader["overskrift"].ToString() + "</a><br>\n";
                        menu4under = reader["pagename"].ToString() + ".aspx?tekstID=" + reader["tekstID"].ToString();
                    }
                }
                reader.Close();

                SQLStr = "SELECT...";
                MySqlCommand cmd2 = new MySqlCommand(SQLStr, MyConn);
                MySqlDataReader reader2 = cmd2.ExecuteReader();
                if (reader2.HasRows)
                {
                    while(reader2.Read())
                    {
                        antalUnder = antalUnder++;
                        div4 = div4 + "<a href=\"txt.aspx?tekstID=" + reader2["tekstID"].ToString() + "\">" + reader2["overskrift"].ToString() + "</a><br>\n";
                        menu4under = "txt.aspx?tekstID=" + reader2["tekstID"].ToString();
                    }
                }
                reader2.Close();
                MyConn.Close();

            }
            catch(Exception ex)
            {
                configSingletonErr = "6\n" + ex.ToString();
            }

            try
            {
                menu = menu + "<table cellpadding=\"0\" cellspacing=\"0\" border=\"0\" width=\"" + width + "\">";
                menu = menu + "...";
            }
            catch(Exception ex)
            {
                configSingletonErr = "7\n" + ex.ToString();
            }

        }
        public static ConfigSingleton Instance()
        {
            // Uses "Lazy initialization"
            if( instance == null )
            {
                instance = new ConfigSingleton();
            }
            return instance;
        }
        public string ConfigSingletonErr
        {
            get
            {
                return configSingletonErr;
            }
        }
    }
}
Avatar billede trumf Nybegynder
06. april 2005 - 00:11 #7
jeg tager lige en lur, så må vi skrives ved i morgen :)
Avatar billede christian Nybegynder
06. april 2005 - 09:25 #8
Du kan få Visual Studio til at lave PDB fil sammen med din dll.
Når du har en .pdb fil ved siden af din .dll fil vil du få linje nummer og kodestump som fejler...
Avatar billede christian Nybegynder
06. april 2005 - 09:27 #9
Du finder den her:
Højreklik på projekt vælg properties.
Configuration Properties -> Build -> Generate Debugging Information (skal være sat til true)

Du kan også godt lave trace.write i din dll, hvis du har brug for yderligere debugging
Avatar billede trumf Nybegynder
06. april 2005 - 16:00 #10
OK super, Christian det var lige det der skulle til, smider du et svar ?
Avatar billede christian Nybegynder
06. april 2005 - 16:01 #11
det var da godt :-)
Avatar billede trumf Nybegynder
06. april 2005 - 16:16 #12
Og så kommer der et nyt spm til at klare fejlen hvis nogen skulle være interesseret.
Takker ;-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester