mirror of
https://github.com/oliverschmidt/contiki.git
synced 2025-08-07 18:25:14 +00:00
bugfix: breakpoints should only trigger once
updated watchpointmote method to return executable address, not wrapped in an object
This commit is contained in:
@@ -573,9 +573,9 @@ public abstract class MspMote extends AbstractEmulatedMote implements Mote, Watc
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Integer getExecutableAddressOf(File file, int lineNr) {
|
public int getExecutableAddressOf(File file, int lineNr) {
|
||||||
if (file == null || lineNr < 0 || debuggingInfo == null) {
|
if (file == null || lineNr < 0 || debuggingInfo == null) {
|
||||||
return null;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Match file */
|
/* Match file */
|
||||||
@@ -589,7 +589,7 @@ public abstract class MspMote extends AbstractEmulatedMote implements Mote, Watc
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (lineTable == null) {
|
if (lineTable == null) {
|
||||||
return null;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Match line number */
|
/* Match line number */
|
||||||
@@ -603,10 +603,16 @@ public abstract class MspMote extends AbstractEmulatedMote implements Mote, Watc
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private long lastBreakpointCycles = -1;
|
||||||
public void signalBreakpointTrigger(MspBreakpoint b) {
|
public void signalBreakpointTrigger(MspBreakpoint b) {
|
||||||
|
if (lastBreakpointCycles == myCpu.cycles) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
lastBreakpointCycles = myCpu.cycles;
|
||||||
if (b.stopsSimulation() && getSimulation().isRunning()) {
|
if (b.stopsSimulation() && getSimulation().isRunning()) {
|
||||||
/* Stop simulation immediately */
|
/* Stop simulation immediately */
|
||||||
stopNextInstruction();
|
stopNextInstruction();
|
||||||
|
@@ -35,6 +35,7 @@ import java.awt.BorderLayout;
|
|||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
import java.awt.Component;
|
import java.awt.Component;
|
||||||
import java.awt.Point;
|
import java.awt.Point;
|
||||||
|
import java.awt.Rectangle;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
@@ -165,9 +166,9 @@ public class CodeUI extends JPanel {
|
|||||||
/* Configure breakpoint menu options */
|
/* Configure breakpoint menu options */
|
||||||
/* XXX TODO We should ask for the file specified in the firmware, not
|
/* XXX TODO We should ask for the file specified in the firmware, not
|
||||||
* the actual file on disk. */
|
* the actual file on disk. */
|
||||||
Integer address =
|
int address =
|
||||||
CodeUI.this.mote.getExecutableAddressOf(displayedFile, line);
|
CodeUI.this.mote.getExecutableAddressOf(displayedFile, line);
|
||||||
if (address == null) {
|
if (address < 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
final int start = codeEditorLines.get(line);
|
final int start = codeEditorLines.get(line);
|
||||||
@@ -328,7 +329,10 @@ public class CodeUI extends JPanel {
|
|||||||
SwingUtilities.invokeLater(new Runnable() {
|
SwingUtilities.invokeLater(new Runnable() {
|
||||||
public void run() {
|
public void run() {
|
||||||
try {
|
try {
|
||||||
codeEditor.scrollRectToVisible(codeEditor.modelToView(start));
|
Rectangle r = codeEditor.modelToView(start);
|
||||||
|
if (r != null) {
|
||||||
|
codeEditor.scrollRectToVisible(codeEditor.modelToView(start));
|
||||||
|
}
|
||||||
} catch (BadLocationException e) {
|
} catch (BadLocationException e) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -70,6 +70,6 @@ public interface WatchpointMote extends Mote {
|
|||||||
public boolean breakpointExists(int address);
|
public boolean breakpointExists(int address);
|
||||||
public boolean breakpointExists(File file, int lineNr);
|
public boolean breakpointExists(File file, int lineNr);
|
||||||
|
|
||||||
public Integer getExecutableAddressOf(File file, int lineNr);
|
public int getExecutableAddressOf(File file, int lineNr);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user