guyskk / guyskk/pyv8

PyV8 debugger not properly handling break events

Open
#89 6 comments 0 reactions 0 assignees View on GitHub
auto-migrated OpSys-All Priority-Medium Type-Enhancement
Dominant language
Python
Stars
0
Forks
0
PR merge metrics
No merged PRs in 30d

Description

```

While playing with PyV8 debugger I identified an issue. As you can easily
realize from the attached test code, the command line argument is used to
enable/disable the Debugger onMessage method. If the code is executed with
onMessage method disabled, nothing happens after the BeforeCompile/AfterCompile
events. This should be a bug because a break event is generated but not handled
by the Debugger class methods.

buffer@alnitak ~ $ python DebuggerTest.py 0
BeforeCompile event:
{"seq":0,"type":"event","event":"beforeCompile","success":true,"body":{"script":

{"handle":1,"type":"script","id":17,"lineOffset":0,"columnOffset":0,"lineCount":
14,"sourceStart":"\nfunction my_func(t)\n{\n\tvar s = \"foo\";\n\tvar i =
0;\n\n\tfor (i = 0; i < 3; i++)
{\n\t","sourceLength":120,"scriptType":2,"compilationType":0,"context":{"ref":0}
,"text":" (lines:
14)"}},"refs":[{"handle":0,"type":"context","text":"#"}],"running
":true}
AfterCompile event:
{"seq":2,"type":"event","event":"afterCompile","success":true,"body":{"script":{
"handle":1,"type":"script","id":17,"lineOffset":0,"columnOffset":0,"lineCount":1
4,"sourceStart":"\nfunction my_func(t)\n{\n\tvar s = \"foo\";\n\tvar i =
0;\n\n\tfor (i = 0; i < 3; i++)
{\n\t","sourceLength":120,"scriptType":2,"compilationType":0,"context":{"ref":0}
,"text":" (lines:
14)"}},"refs":[{"handle":0,"type":"context","text":"#"}],"running
":true}
[hanging here]

Taking a look at what happens when the onMessage is enabled, we can see that
the break event is properly generated so it seems not to be handled as stated
before.

buffer@alnitak ~ $ python DebuggerTest.py 1
BeforeCompile event:
{"seq":0,"type":"event","event":"beforeCompile","success":true,"body":{"script":
{"handle":1,"type":"script","id":17,"lineOffset":0,"columnOffset":0,"lineCount":
14,"sourceStart":"\nfunction my_func(t)\n{\n\tvar s = \"foo\";\n\tvar i =
0;\n\n\tfor (i = 0; i < 3; i++)
{\n\t","sourceLength":120,"scriptType":2,"compilationType":0,"context":{"ref":0}
,"text":" (lines:
14)"}},"refs":[{"handle":0,"type":"context","text":"#"}],"running
":true}
Debug message: {u'body': {u'script': {u'columnOffset': 0, u'handle': 1,
u'compilationType': 0, u'text': u' (lines: 14)', u'sourceLength': 120,
u'sourceStart': u'\nfunction my_func(t)\n{\n\tvar s = "foo";\n\tvar i =
0;\n\n\tfor (i = 0; i < 3; i++) {\n\t', u'lineCount': 14, u'scriptType': 2,
u'lineOffset': 0, u'context': {u'ref': 0}, u'type': u'script', u'id': 17}},
u'seq': 1, u'success': True, u'refs': [{u'type': u'context', u'handle': 0,
u'text': u'#'}], u'running': True, u'type': u'event', u'event':
u'afterCompile'}
AfterCompile event:
{"seq":2,"type":"event","event":"afterCompile","success":true,"body":{"script":{
"handle":1,"type":"script","id":17,"lineOffset":0,"columnOffset":0,"lineCount":1
4,"sourceStart":"\nfunction my_func(t)\n{\n\tvar s = \"foo\";\n\tvar i =
0;\n\n\tfor (i = 0; i < 3; i++)
{\n\t","sourceLength":120,"scriptType":2,"compilationType":0,"context":{"ref":0}
,"text":" (lines:
14)"}},"refs":[{"handle":0,"type":"context","text":"#"}],"running
":true}
Debug message: {u'body': {u'invocationText': u'[anonymous]()', u'script':
{u'lineCount': 14, u'columnOffset': 0, u'id': 17, u'lineOffset': 0, u'name':
u''}, u'sourceLineText': u'', u'sourceColumn': 0, u'sourceLine': 0}, u'type':
u'event', u'event': u'break', u'seq': 3}
[hanging here]

Regards,
Angelo

```

Original issue reported on code.google.com by `angelo.d...@gmail.com` on 13 Jun 2011 at 2:11

Attachments:
- [DebuggerTest.py](https://storage.googleapis.com/google-code-attachments/pyv8/issue-89/comment-0/DebuggerTest.py)

Contributor guide

No contributing guide indexed for this repository

Research direction

Start with the attached DebuggerTest.py and trace the Debugger onMessage path, comparing runs with the command-line argument set to 0 and 1. Reproduce the hang after the compile events and inspect how the break event reaches the Debugger class; done means the break event is handled without requiring onMessage to be enabled.

Written by the indexing model from the issue text.

Assessment

Tech stack
javascript, python
Domain
devtools
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
30/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.