Yes, it is recommended to use 1.3.1_03. Sun claims they have fixed the problem with wrong instruction-to-line number association. The effect of this javac bug was that debugger was showing the execution point at the wrong line for some "if: statements and "catch" blocks. I would also recommend to run the debuggee under the classic VM. This slows application startup, but stepping is much faster than when using HotSpot.
Best regards, Eugene Zhuravlev JetBrains, Inc / IntelliJ Software, http://www.intellij.com/ "Develop with pleasure!" ----- Original Message ----- From: "Jon Steelman" <[EMAIL PROTECTED]> To: <[EMAIL PROTECTED]> Sent: Friday, April 12, 2002 20:43 Subject: Re: [Eap-list] debugger's MT bug with samples attached > Can IntelliJ let us know if they recommend using Ariadna with 1.3.1_03 > instead of 1.3.1_02? > > Thanks, > Jon > > Robert S. Sfeir wrote: > > >Anton, there have been a few bug fixes since the JDK you're using. You > >really should use JDK 1.3.1_03. I don;t know how much of a diff it will > >make, but it's worth a shot. I've had a few problems with applets with > >previous versions to 1.3.1_03 and it was worth the switch. It seems > >that IDEA behaves better with it too. > > > >R > >On Fri, 2002-04-12 at 08:46, Anton Shahu wrote: > > > >>The debugger has a hard time switching contexts and apparently > >>loses track if the next breakpoint happens in another thread as shown > >>in the two attached files. > >> > >>Place a breakpoint at respectively readValues and writeValues of RWTest > >>and debug RWTest. The first times the debugger will stop at readValues > >>but then the next breakpoint seems never to be reached. The CPU is at > >>almost 0% and the JVM has clearly stopped, but Idea doesn't know this... > >> > >>The same thing works like clockwork with Bugseeker. JDK used > >> > >>java -version > >>java version "1.3.1" > >>Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.1-b24) > >>Java HotSpot(TM) Client VM (build 1.3.1-b24, mixed mode) > >> > >>socket or memory have same effect, but chosing classic seems to solve > >>the issue. The help file says otherwise... > >> > >>Idea build 616 > >> > >>Anton > >> > >>_________________________________________________________________ > >>Get your FREE download of MSN Explorer at http://explorer.msn.com/intl.asp. > >>---- > >> > > > >>public class RWLock { > >> > >> private int readers; > >> private int writersWaiting; > >> > >> private boolean writingInProgress; > >> private int maxWritersWaiting = 1; > >> > >> RWLock(int maxWW) { > >> maxWritersWaiting = maxWW; > >> } > >> > >> synchronized public void getReadLock() { > >> while (writingInProgress | (writersWaiting >= maxWritersWaiting)) { > >> try { > >> wait(); > >> } catch (InterruptedException ie) { > >> } > >> } > >> readers++; > >> } > >> > >> synchronized public void releaseReadLock() { > >> readers--; > >> if ((readers == 0) & (writersWaiting > 0)) { > >> notify(); > >> } > >> } > >> > >> synchronized public void getWriteLock() { > >> writersWaiting++; > >> while ((readers > 0) | writingInProgress) { > >> try { > >> wait(); > >> } catch (InterruptedException ie) { > >> } > >> } > >> writersWaiting--; > >> writingInProgress = true; > >> } > >> > >> synchronized public void releaseWriteLock() { > >> writingInProgress = false; > >> notifyAll(); > >> } > >> > >> public int getReaders() { > >> return readers; > >> } > >> > >> public int getWaitingWriters() { > >> return writersWaiting; > >> } > >> > >>} > >> > >>/* > >>* $Log:$ > >>*/ > >>---- > >> > > > >>public class RWTest { > >> int arr[]; > >> String name; > >> RWLock lock; > >> > >> public static void main(String args[]) { > >> RWTest rwtest = new RWTest(); > >> } > >> > >> > >> RWTest() { > >> lock = new RWLock(3); > >> arr = new int[3]; > >> name = "name"; > >> for (int i = 0; i < 20; i++) > >> (new ReaderThread()).start(); > >> > >> for (int j = 0; j < 4; j++) > >> (new WriterThread()).start(); > >> } > >> > >> public void readValues() { > >> lock.getReadLock(); > >> System.out.println("Read Lock obtained by " + > >>Thread.currentThread().getName()); > >> System.out.println(" >>>> Readers active = " + > >>lock.getReaders()); > >> System.out.println(" >>>> Writers waiting = " + > >>lock.getWaitingWriters()); > >> for (int i = 0; i < arr.length; i++) > >> System.out.print(arr[i] + " "); > >> System.out.println(name); > >>//PLACE BREAKPOINT IN NEXT LINE > >> System.out.println("Read Lock to be released by " + > >>Thread.currentThread().getName()); > >> lock.releaseReadLock(); > >> } > >> > >> public void writeValues() { > >> lock.getWriteLock(); > >> System.out.println("Write Lock obtained by " + > >>Thread.currentThread().getName()); > >> int value = (int) (Math.random() * 100); > >> for (int i = 0; i < arr.length; i++) > >> arr[i] = value; > >> name = "" + value; > >>//PLACE BREAKPOINT IN NEXT LINE > >> System.out.println("Write Lock to be released by " + > >>Thread.currentThread().getName()); > >> lock.releaseWriteLock(); > >> } > >> > >> class ReaderThread extends Thread { > >> public void run() { > >> while (true) { > >> try { > >> readValues(); > >> Thread.sleep((int) (Math.random() * 50)); > >> } catch (Exception e) { > >> } > >> } > >> } > >> } > >> > >> class WriterThread extends Thread { > >> public void run() { > >> while (true) { > >> try { > >> writeValues(); > >> Thread.sleep((int) (Math.random() * 100)); > >> } catch (Exception e) { > >> } > >> } > >> } > >> } > >>} > >> > > > _______________________________________________ Eap-list mailing list [EMAIL PROTECTED] http://www.intellij.com/mailman/listinfo/eap-list
