Hi Frédéric,
that's great that you are ready to put the effort into fdb with workers support!

I have to say that IntelliJ IDEA still doesn't support debugging apps with workers. I spent some time on it but faced some bugs in fdb that were not that easy to workaround. That's not an excuse for me and I hope to finally support workers debug in the next version. Luckily fdb is not a black box for me any more.

Below are some of the bugs that I faced. I played with this project: http://gotoandlearn.com/play.php?id=169. 'Download files' link contains already compiled MP3Worker.swf which is the main app.

1. When the worker is loaded it is impossible to switch to main thread using 'worker 0' command. Fdb says that active worker has changed but asking 'info workers' again says that actually it hasn't. See listing [1].

2. More important bug for the IDE integration is inability to set breakpoint without knowing file id. Files that belong to different workers may have the same id. When I ask to set a breakpoint in a file with given name but current active worker doesn't have file with this name then fdb sets the breakpoint inside completely different file that does belong to the current worker and has the same id as the file where I asked to set breakpoint. See listing [2].

Alexander

[1]

C:\flex\air_sdk_13.0_asc_2.0\bin>fdb
C:\flex\air_sdk_13.0_asc_2.0\bin>java -Dsun.io.useCanonCaches=false -Xms32m -Xmx512m 
-Dapplication.home="C:\flex\air_sdk_13.0_asc_2.0\bin\.." -jar 
"C:\flex\air_sdk_13.0_asc_2.0\bin\../lib/legacy/fdb.jar"
Adobe fdb (Flash Player Debugger) [build development]
Copyright (c) 2004-2007 Adobe, Inc. All rights reserved.
(fdb) run
Waiting for Player to connect
Player connected; session starting.
Set breakpoints and then type 'continue' to resume the session.
[SWF] C:\work\flex_projects\MP3Worker\bin-debug\MP3Worker.swf - 175?169 bytes 
after decompression
(fdb) c
[WorkerCreate] 1
Additional ActionScript code has been loaded from a SWF or a frame.
To see all currently loaded files, type 'info files'.
Active worker has changed to worker 1
Set additional breakpoints as desired, and then type 'continue'.
(fdb) info workers
Main Thread 0 - Running
Worker 1 - Suspended (Active)
[SWF] C:\work\flex_projects\MP3Worker\bin-debug\MP3Worker.swf - 493?264 bytes 
after decompression
Set additional breakpoints as desired, and then type 'continue'.
(fdb) worker 0
*Active worker has changed to worker Main Thread*
Set additional breakpoints as desired, and then type 'continue'.
(fdb) info workers
*Main Thread 0 - Running*
*Worker 1 - Suspended (Active)**
*Set additional breakpoints as desired, and then type 'continue'.
(fdb)

[2]

...
(fdb) info workers
Main Thread 0 - Suspended (Active)
Worker 1 - Suspended
(fdb) show files
1 /Users/leebrimelow/Documents/Adobe Flash Builder 
4.6/MP3Worker/src/MP3Worker.as, MP3Worker.as (Main Thread)
2 /Users/leebrimelow/Documents/Adobe Flash Builder 
4.6/MP3Worker/src/Workers.as, Workers.as (Main Thread)
1 /Users/leebrimelow/Documents/Adobe Flash Builder 
4.6/MP3Worker/src/BackWorker.as, BackWorker.as (Worker 1)
2 /Users/kikko/work/tests/shineMP3_alchemy/src/fr/kikko/lab/ShineMP3Encoder.as, 
ShineMP3Encoder.as (Worker 1)
*(fdb) break BackWorker.as:26**
**Breakpoint 2: file MP3Worker.as, line 26**
*(fdb)


On 27.04.2014 4:01, Frédéric THOMAS wrote:
Hi,

To resume a bit what I did and discover today:

1- I merged the donated code to the the current FDB, keeping the existing fixes 
and the current ExpressionEvaluator (I guess It is possible to use the new 
Falcon based implementation modifying the ANT script which builds it, in order 
to link the Falcon sources).

2- The new commands are "worker <workerID>" used to select a parlicular worker by its ID 
and "info workers", this is an example of what gives a break inside a worker and what displays 
the 2 commands :

(fdb) info workers
!mainThread! 0 - !workerRunning!
!inWorker! {worker=1} - !workerSuspended! !workerSelected!

(fdb) worker 0
!workerChanged! !mainThread!

(fdb) info workers
!mainThread! 0 - !workerRunning! !workerSelected!
!inWorker! {worker=1} - !workerSuspended!

(fdb) worker 1
!workerChanged! 1

(fdb) info workers
!mainThread! 0 - !workerRunning!
!inWorker! {worker=1} - !workerSuspended! !workerSelected!

Note for IDE integration:

1- At the moment, watch, displays and breakpoints are set for 1 particular 
worker, it means, they need to be defined again when a worker starts.
2- "info breakpoints" does well display the breakpoints for the same line and 
on different worker of the same class but without the relative worker ID (I guess it 
could be easily fixed)

I'll be back on it on Monday.

Frédéric THOMAS                                         

Reply via email to