Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java tools & IDE's > Отладка Java кода в Eclipse


Автор: Forsaken 25.2.2010, 12:01
Здравствуйте.
Помогите пожалуйста, найти информацию по отладке кода в Eclipse.
Я после в VS не могу разобраться, как начать трассировать как закончить трассировку, как трассировать пропуская методы и заходя в них.. Пробовал тыком, но что-то не получается нормально...

Буду очень благодарен за помощь.

Автор: Exai1e 25.2.2010, 12:27
http://www.ibm.com/developerworks/library/os-ecbug/?S_TACT=105AGX44&S_CMP=ART

Автор: Forsaken 25.2.2010, 14:38
Exai1e,
Спасибо за ссылку!
 

Автор: Forsaken 25.2.2010, 16:45
Прошу прощения за мою несоображучесть, но я всеравно непонимаю как делать некоторые вещи..
Вот например у меня есть код из книги:
Код

import java.lang.reflect.*;
import java.util.*;

/**
 * This program uses reflection to spy on objects.
 * @version 1.11 2004-02-21
 * @author Cay Horstmann
 */
public class ObjectAnalyzerTest
{
   public static void main(String[] args)
   {
      ArrayList<Integer> squares = new ArrayList<Integer>();
      for (int i = 1; i <= 5; i++)
         squares.add(i * i);
      System.out.println(new ObjectAnalyzer().toString(squares)); 
   }
}

class ObjectAnalyzer
{
   /**
    * Converts an object to a string representation that lists all fields.
    * @param obj an object
    * @return a string with the object's class name and all field names and
    * values
    */
   public String toString(Object obj)
   {
      if (obj == null) return "null";
      if (visited.contains(obj)) return "...";
      visited.add(obj);
      Class cl = obj.getClass();
      if (cl == String.class) return (String) obj;
      if (cl.isArray())
      {
         String r = cl.getComponentType() + "[]{";
         for (int i = 0; i < Array.getLength(obj); i++)
         {
            if (i > 0) r += ",";
            Object val = Array.get(obj, i);
            if (cl.getComponentType().isPrimitive()) r += val;
            else r += toString(val);
         }
         return r + "}";
      }

      String r = cl.getName();
      // inspect the fields of this class and all superclasses
      do
      {
         r += "[";
         Field[] fields = cl.getDeclaredFields();
         AccessibleObject.setAccessible(fields, true);
         // get the names and values of all fields
         for (Field f : fields)
         {
            if (!Modifier.isStatic(f.getModifiers()))
            {
               if (!r.endsWith("[")) r += ",";
               r += f.getName() + "=";
               try
               {
                  Class t = f.getType();
                  Object val = f.get(obj);
                  if (t.isPrimitive()) r += val;
                  else r += toString(val);
               }
               catch (Exception e)
               {
                  e.printStackTrace();
               }
            }
         }
         r += "]";
         cl = cl.getSuperclass();
      }
      while (cl != null);

      return r;
   }

   private ArrayList<Object> visited = new ArrayList<Object>();
}


Скажите пожалуйста, 
1) как начать трассировку не создавая контрольной точки -с самого начала?
2) как зайти в метод или наоборот протрассировать незаходя в методы? (как я понял F5 заходит в методы, но у меня проблемы с этим..)
И что значит сообщение Source not found. в окошке PrivilegedActionException(Throwable). <int>(Throwable) line: 243
-когда я пытаюсь зайти в метод toString(squares), в строке System.out.println(new ObjectAnalyzer().toString(squares)); (в main)?

Автор: batigoal 25.2.2010, 17:28
Цитата(Forsaken @  25.2.2010,  17:45 Найти цитируемый пост)
1) как начать трассировку не создавая контрольной точки -с самого начала?

Поставить контрольную точку в первой строке main smile

Цитата(Forsaken @  25.2.2010,  17:45 Найти цитируемый пост)
2) как зайти в метод или наоборот протрассировать незаходя в методы? (как я понял F5 заходит в методы, но у меня проблемы с этим..)

Хоткеев Эклипса не знаю, но поищи в меню Step into... и Step over... соответственно.

Цитата(Forsaken @  25.2.2010,  17:45 Найти цитируемый пост)
И что значит сообщение Source not found. в окошке PrivilegedActionException(Throwable). <int>(Throwable) line: 243
-когда я пытаюсь зайти в метод toString(squares), в строке System.out.println(new ObjectAnalyzer().toString(squares)); (в main)? 

Ты пытаешься зайти внутрь метода, для которого у тебя нет исходника, только скомпилированная версия. Видимо, какая-то стороняя либа.

Автор: Forsaken 25.2.2010, 17:42
batigoal
Спасибо! Буду пытаться разобраться...

Простите уж меня за такие вопросы.

Автор: sergioK 24.3.2010, 16:18
Цитата(Forsaken @ 25.2.2010,  17:42)
batigoal
Спасибо! Буду пытаться разобраться...

Простите уж меня за такие вопросы.

Возникла проблема с дебагингом любая потытка отладить вывдает

Cannot connect to VM
socket closed



 FATAL ERROR in native method: JDWP No transports initialized, jvmtiError=AGENT_ERROR_TRANSPORT_INIT(197)
ERROR: transport error 202: connect failed: Connection refused
ERROR: JDWP Transport dt_socket failed to initialize, TRANSPORT_INIT(510)
JDWP exit error AGENT_ERROR_TRANSPORT_INIT(197): No transports initialized [../../../src/share/back/debugInit.c:708]

при потытке прописать -agentlib:jdwp=transport=dt_shmem,server=y,suspend=n
получаю тотже Cannot connect to VM
socket closed ERROR: 
Cannot load this JVM TI agent twice, check your java command line for duplicate jdwp options.
т,e он кака будто пытаеться два раза подключиться 


почему сокет закрыт  как можно определить причину 
у меня есть пять разных версий эклипса ошибка выходит во всех версиях , 
пробовал искать в гугле пока без результата ,
как понять кто блокирует порт ?

проблема видимо в эклипсе а не в JVM т,к, нет бинс работает без проблем 
 


Автор: batigoal 24.3.2010, 17:18
Цитата(sergioK @  24.3.2010,  17:18 Найти цитируемый пост)
как понять кто блокирует порт ?

netstat -a (вроде так и в Винде, и в Линухе)

Добавлено через 1 минуту и 1 секунду
А что за операционка, кстати? Вот тут для Убунты порешали аналогичную проблему: http://ubuntuforums.org/showthread.php?t=463007

Автор: sergioK 24.3.2010, 17:24
Цитата(batigoal @ 24.3.2010,  17:18)
Цитата(sergioK @  24.3.2010,  17:18 Найти цитируемый пост)
как понять кто блокирует порт ?

netstat -a (вроде так и в Винде, и в Линухе)

Добавлено @ 17:19
А что за операционка, кстати? Вот тут для Убунты порешали аналогичную проблему: http://ubuntuforums.org/showthread.php?t=463007

что такое убунта ?
у меня винда,  вижу я вот такую картину и какой вывод ?


TCP    0.0.0.0:135            0.0.0.0:0              LISTENING
TCP    0.0.0.0:445            0.0.0.0:0              LISTENING
TCP    127.0.0.1:1025         0.0.0.0:0              LISTENING
TCP    192.168.1.2:139        0.0.0.0:0              LISTENING
TCP    192.168.1.2:1059       209.85.135.99:80       CLOSE_WAIT
TCP    192.168.1.2:1060       209.85.135.99:80       CLOSE_WAIT
TCP    192.168.1.2:1061       209.85.135.99:80       CLOSE_WAIT
TCP    192.168.1.2:1063       209.85.135.99:80       CLOSE_WAIT
TCP    192.168.1.2:1065       74.125.39.101:80       CLOSE_WAIT
TCP    192.168.1.2:1070       74.125.19.101:80       CLOSE_WAIT
TCP    192.168.1.2:1072       209.85.135.99:80       CLOSE_WAIT
TCP    192.168.1.2:1073       72.5.124.102:80        CLOSE_WAIT
TCP    192.168.1.2:1074       72.5.124.102:80        CLOSE_WAIT
TCP    192.168.1.2:1075       72.5.124.102:80        CLOSE_WAIT
TCP    192.168.1.2:1076       72.5.124.102:80        CLOSE_WAIT
TCP    192.168.1.2:1077       72.5.124.102:80        CLOSE_WAIT
TCP    192.168.1.2:1078       72.5.124.102:80        CLOSE_WAIT
TCP    192.168.1.2:1080       77.67.20.66:80         CLOSE_WAIT
TCP    192.168.1.2:1083       72.5.124.55:80         CLOSE_WAIT
TCP    192.168.1.2:1085       72.5.124.55:80         CLOSE_WAIT
UDP    0.0.0.0:445            *:*
UDP    127.0.0.1:123          *:*
UDP    127.0.0.1:1056         *:*
UDP    127.0.0.1:1071         *:*
UDP    127.0.0.1:1900         *:*
UDP    192.168.1.2:123        *:*
UDP    192.168.1.2:137        *:*
UDP    192.168.1.2:138        *:*
UDP    192.168.1.2:1900       *:*

Автор: Alex1998 17.5.2017, 18:32
Добрый день я начинающий программист и только только начал работать на Java в среде программирования Eclipse много сайтов просмотрел никак не смог найти как соединяются классы, т.е. перетекание из одного класса в другой с помощью Button все это происходит в окне в JFrame, за ранее Спасибо

Автор: vpf 18.5.2017, 09:41
вы имеете ввиду как перейти из одной формы возможно это поможет http://javatalks.ru/topics/20178

Автор: Alex1998 18.5.2017, 14:44
нет нужно сделать что то в роде ссылки чтобы когда нажимаешь Button в одном классе открывался другой класс с содержанием в нем и все это происходит в JFrame

Автор: vpf 18.5.2017, 15:28
Вот они переключаются из MyPanel в MyPanel2 класс  JPanel  http://stackoverflow.com/questions/11273267/java-open-a-new-window-by-clicking-a-button
А это чуть измененный пример по кнопке test3 можно переключиться обратно.
Код

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class CardLayoutExample
{
    private JPanel contentPane;
    private MyPanel panel1;
    private MyPanel2 panel2;

    private void displayGUI()
    {
        JFrame frame = new JFrame("Card Layout Example");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel contentPane = new JPanel();
        contentPane.setBorder(
            BorderFactory.createEmptyBorder(5, 5, 5, 5));
        contentPane.setLayout(new CardLayout());
        panel1 = new MyPanel(contentPane);
        panel2 = new MyPanel2(contentPane);
        contentPane.add(panel1, "Panel 1"); 
        contentPane.add(panel2, "Panel 2");
        frame.setContentPane(contentPane);
        frame.pack();   
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
    }

    public static void main(String... args)
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            public void run()
            {
                new CardLayoutExample().displayGUI();
            }
        });
    }
}

class MyPanel extends JPanel {

    private JTextField How;
    private JLabel jcomp2;
    private JLabel jcomp3;
    private JButton jcomp4;
    private JPanel contentPane;

    public MyPanel(JPanel panel) {

        contentPane = panel;
        //construct components
        How = new JTextField (1);
        jcomp2 = new JLabel ("How long were you parked?");
        jcomp3 = new JLabel ("Minutes");
        jcomp4 = new JButton ("openNewWindow");

        //adjust size and set layout
        setPreferredSize (new Dimension (315, 85));
        setLayout (null);

        //set component bounds (only needed by Absolute Positioning)
        How.setBounds (245, 50, 60, 25);
        jcomp2.setBounds (35, 30, 185, 50);
        jcomp3.setBounds (250, 30, 60, 20);
        jcomp4.setLocation(0, 0);
        jcomp4.setSize(315, 25);
        jcomp4.addActionListener( new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
                CardLayout cardLayout = (CardLayout) contentPane.getLayout();
                cardLayout.next(contentPane);
            }
        });

        //add components
        add (How);
        add (jcomp2);
        add (jcomp3);
        add (jcomp4);               
    }
}

class MyPanel2 extends JPanel {
    private JButton jcomp1;
    private JButton jcomp2;
    private JButton jcomp3;
    private JTextField jcomp4;

    public MyPanel2(JPanel contentPane) {
        //construct components
        jcomp1 = new JButton ("test1");
        jcomp2 = new JButton ("test2");
        jcomp3 = new JButton ("test3");
        jcomp4 = new JTextField (5);

        //adjust size and set layout
        setPreferredSize (new Dimension (395, 156));
        setLayout (null);
        jcomp3.addActionListener( new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
                CardLayout cardLayout = (CardLayout) contentPane.getLayout();
                cardLayout.next(contentPane);
            }
        });

        //set component bounds (only needed by Absolute Positioning)
        jcomp1.setBounds (20, 45, 100, 25);
        jcomp2.setBounds (135, 60, 100, 25);
        jcomp3.setBounds (260, 35, 100, 25);
        jcomp4.setBounds (105, 115, 100, 25);

        //add components
        add (jcomp1);
        add (jcomp2);
        add (jcomp3);
        add (jcomp4);       
    }
}



Автор: Alex1998 18.5.2017, 15:45
Спасибо за помощь

Автор: Marcus22 19.8.2017, 12:23
как УВИДЕТЬ построчное выполнение кода? Как реализовать аналог F8?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)