Hi all,
I run processing 4.4.4 on my Ubuntu 22.04. The tool runs perfectly in normal mode but not in debug. There is no issue to activate debug mode but this has no effects at all.
I mean I can still run my sketch and I can set a break point but it never stops at it !
It acts as normal mode.
What is missing in my configuration to make it works ?
Thanks in advance.
I just tried it on an Ubuntu 24.04 VM and the debugger works there. Could you maybe share your code so we can maybe further diagnose the issue?
I can share … obviously. but this happens whatever the code. Even demo code
Oh my… I’m wrong only my code doesn’t work …
import processing.serial.*;
JSONObject json;
Serial port; // The serial port
char[] teapotPacket = new char[14]; // InvenSense Teapot packet
int serialCount = 0; // current packet byte position
int synced = 0;
int interval = 0;
float[] K = {0, 0, 0};
int motor;
PFont Font1, Font2;
PGraphics Curve;
PGraphics Info;
int guard_h = 80;
int guard_v = 30;
int tick_s = 10;
int font_size = 32;
int info_h = 400;
int info_v = 200;
String[] Mot = { "YAW", "PITCH", "ROLL" };
class PPoint {
float angle, time, cmd;
PPoint (float a, float t, float c) {
angle = a;
time = t;
cmd = c;
}
}
PPoint[][] datas = new PPoint[2][255];
int nb_trace = 0;
int nb_points = 0;
int prev_seq = 0;
void setup() {
size(1920, 1080);
surface.setTitle("PID Drawer");
// Uncomment the following two lines to see the available fonts
String[] fontList = PFont.list();
printArray(fontList);
Font1 = createFont("FreeSans Bold", font_size);
Font2 = createFont("FreeSans", font_size);
Curve = createGraphics(width, height);
Info = createGraphics(400, 200);
// display serial port list for debugging/clarity
println(Serial.list());
// get the first available port (use EITHER this OR the specific port code below)
String portName = Serial.list()[0];
// get a specific serial port (use EITHER this OR the first-available code above)
//String portName = "COM4";
// open the serial port
port = new Serial(this, portName, 115200);
println(port);
println(datas[0][0]);
}
void draw() {
// black background
background(0);
Curve.beginDraw();
Curve.textFont(Font2);
// Horizontal line
Curve.stroke(255);
// Horizontal line
Curve.line(guard_h, height / 2, width - guard_h, height / 2);
for (int i = 0; i < 20; i = i+1) {
Curve.line(guard_h + i * 90, height / 2 - tick_s / 2, guard_h + i * 90, height / 2 + tick_s / 2);
}
fill(255);
Curve.triangle(width - guard_h, -10 + height / 2,
width - guard_h + 10, height / 2,
width - guard_h, +10 + height / 2);
// Vertial line
Curve.line(guard_h, guard_v, guard_h, height - guard_v);
for (int i = 0; i <= 12; i = i+1) {
Curve.line(guard_h - tick_s / 2, i * 80 + guard_v, guard_h + tick_s / 2, i * 80 + guard_v);
Curve.text(nfp(60 - i * 10, 0), 0, i * 80 + guard_v + font_size / 4);
}
Curve.triangle(guard_h - 10, guard_v, guard_h + 10, guard_v, guard_h, guard_v - 10);
Curve.triangle(guard_h - 10, height - guard_v, guard_h + 10, height - guard_v, guard_h, height - guard_v + 10);
Curve.endDraw();
image(Curve, 0, 0);
Info.beginDraw();
Info.stroke(255, 0, 0);
Info.fill(255, 255, 255);
Info.rect(0, 0, info_h, info_v);
Info.fill(1);
Info.textFont(Font1);
Info.text("Motor:", 20, 40);
Info.text("Kp:", 20, 80);
Info.text("Ki:", 20, 120);
Info.text("Kd:", 20, 160);
Info.textFont(Font2);
Info.text(Mot[0], 130, 40);
Info.text(nf(0.0, 0, 4), 130, 80);
Info.text(nf(0.0, 0, 4), 130, 120);
Info.text(nf(0.0, 0, 4), 130, 160);
Info.endDraw();
image(Info, width - info_h - guard_h, guard_v);
}
void serialEvent(Serial port) {
interval = millis();
while (port.available() > 0) {
int ch = port.read();
print((char)ch);
if (synced == 0 && ch != '$') return; // initial synchronization - also used to resync/realign if needed
synced = 1;
if ((serialCount == 1 && ch != 2)
|| (serialCount == 12 && ch != '\r')
|| (serialCount == 13 && ch != '\n')) {
serialCount = 0;
synced = 0;
println("Dump Frame");
return;
}
if (serialCount > 0 || ch == '$') {
teapotPacket[serialCount++] = (char)ch;
if (serialCount == 14) {
serialCount = 0; // restart packet byte position
println("Complete Packet");
if (teapotPacket[10] == 0x1) {
println("Reset is requested");
Curve.beginDraw();
Curve.clear();
Curve.endDraw();
nb_trace = 0;
nb_points = 0;
prev_seq = 0;
}
if ( prev_seq != teapotPacket[9]) {
println("New Seq");
nb_trace++;
}
if (nb_trace >= 2) {
println("Reset Seq");
nb_trace = 0;
}
PPoint p = new PPoint(teapotPacket[6], teapotPacket[7], teapotPacket[8]);
println(nb_trace); println(nb_points);
datas[nb_trace][nb_points] = p;
motor = teapotPacket[2];
K[0] = teapotPacket[3];
K[1] = teapotPacket[4];
K[2] = teapotPacket[5];
nb_points++;
if (nb_points >= 254) {
// Overflow
nb_points = 254;
}
}
}
}
}
void keyPressed() {
json = new JSONObject();
print("Pressed");
if (key == 'a') {
K[0] += 0.1;
}
else if (key == 'q') {
K[1] += 0.1;
}
else if (key == 'w') {
K[2] += 0.1;
}
else if (key == 'z') {
K[0] += 0.01;
}
else if (key == 's') {
K[1] += 0.01;
}
else if (key == 'x') {
K[2] += 0.01;
}
else if (key == 'e') {
K[0] += 0.001;
}
else if (key == 'd') {
K[1] += 0.001;
}
else if (key == 'c') {
K[2] += 0.001;
}
else if (key == 'r') {
K[0] += 0.0001;
}
else if (key == 'f') {
K[1] += 0.0001;
}
else if (key == 'v') {
K[2] += 0.0001;
}
else if (key == 'A') {
K[0] -= 0.1;
}
else if (key == 'Q') {
K[1] -= 0.1;
}
else if (key == 'W') {
K[2] -= 0.1;
}
else if (key == 'Z') {
K[0] -= 0.01;
}
else if (key == 'S') {
K[1] -= 0.01;
}
else if (key == 'X') {
K[2] -= 0.01;
}
else if (key == 'E') {
K[0] -= 0.001;
}
else if (key == 'D') {
K[1] -= 0.001;
}
else if (key == 'C') {
K[2] -= 0.001;
}
else if (key == 'R') {
K[0] -= 0.0001;
}
else if (key == 'F') {
K[1] -= 0.0001;
}
else if (key == 'V') {
K[2] -= 0.0001;
}
else if (key == '1') {
motor = 0;
}
else if (key == '2') {
motor = 1;
}
else if (key == '3') {
motor = 2;
}
json.setInt("motor", motor);
json.setFloat("Kp", K[0]);
json.setFloat("Ki", K[1]);
json.setFloat("Kd", K[2]);
print(json.toString());
port.write(json.toString());
}```
Alright, can you check if debugging works within the draw function but not the serial event function? As far as I recall the serial event runs on a different thread under the hood so is thus not debuggable with the current way Processing handles the debugger.
ok I move forward in this matter. It’s working now …
The reason … the folder and PDE file was not sharing the same name. When I renamed my PDE script with the same content folder it makes it works …
Thank you for figuring that out, I see the same on macOS
Created an issue here:
AFAIK, folder & main .pde file names must match.
It’s not a bug, but a Processing spec.
Since Processing 4.0 the folder & main .pde files can be different and Processing will add main=File.pde
to the sketch.properties instead