source: webkit/trunk/JavaScriptCore/kjs/debugger.cpp@ 16608

Last change on this file since 16608 was 15593, checked in by thatcher, 19 years ago

JavaScriptCore:

Reviewed by Maciej.

Bug 9686: [Drosera] Need the ability to break into Drosera on Javascript exceptions
http://bugzilla.opendarwin.org/show_bug.cgi?id=9686

JavaScriptCore portion of the fix.

  • JavaScriptCore.exp: Update symbol for change in argument type.
  • kjs/debugger.cpp: (Debugger::detach): Clear map of recent exceptions. (Debugger::hasHandledException): Track the most recent exception thrown by an interpreter. (Debugger::exception): Change exception argument to a JSValue.
  • kjs/debugger.h:
  • kjs/nodes.cpp: (Node::debugExceptionIfNeeded): Notify the debugger of an exception if it hasn't seen it before. (ThrowNode::execute): Notify the debugger that an exception is being thrown.
  • kjs/nodes.h:

2006-07-23 Geoffrey Garen <[email protected]>

Patch by Eric Albert, reviewed by Darin and me.


  • Fixed <rdar://problem/4645931> JavaScriptCore stack-scanning code crashes (Collector::markStackObjectsConservatively)


  • bindings/jni/jni_jsobject.cpp: On 64bit systems, jint is a long, not an int. (JavaJSObject::getSlot): (JavaJSObject::setSlot):
  • kjs/collector.cpp: (KJS::Collector::markCurrentThreadConservatively): Use a pointer instead of an int as 'dummy,' because on LP64 systems, an int is not pointer-aligned, and we want to scan the stack for pointers.
  • JavaScriptCore.xcodeproj/project.pbxproj: After a tense cease-fire, the XCode war has started up again!

WebCore:

Reviewed by maciej.

Bug 9686: [Drosera] Need the ability to break into Drosera on Javascript exceptions
http://bugzilla.opendarwin.org/show_bug.cgi?id=9686

WebCore portion of the fix.

  • bridge/mac/WebCoreScriptDebugger.h: (-[WebScriptDebugger exceptionRaised:sourceId:line::]): Add delegate method.
  • bridge/mac/WebCoreScriptDebugger.mm: (WebCoreScriptDebuggerImp::exception): Call delegate method when an exception is raised.

WebKit:

Reviewed by Maciej.

Bug 9686: [Drosera] Need the ability to break into Drosera on Javascript exceptions
http://bugzilla.opendarwin.org/show_bug.cgi?id=9686

WebKit portion of the fix.

  • DefaultDelegates/WebDefaultScriptDebugDelegate.m: (-[WebDefaultScriptDebugDelegate webView:exceptionWasRaised:sourceId:line:forWebFrame:]):
  • DefaultDelegates/WebScriptDebugServer.h:
  • DefaultDelegates/WebScriptDebugServer.m: (-[WebScriptDebugServer webView:exceptionWasRaised:sourceId:line:forWebFrame:]): Notify listeners that an exception has been raised.
  • WebView/WebScriptDebugDelegate.h:
  • WebView/WebScriptDebugDelegate.m: (-[WebScriptCallFrame exceptionRaised:sourceId:line:]): Dispatch through to delegate and WebScriptDebugServer.
  • Property svn:eol-style set to native
File size: 3.5 KB
Line 
1// -*- c-basic-offset: 2 -*-
2/*
3 * This file is part of the KDE libraries
4 * Copyright (C) 1999-2001 Harri Porten ([email protected])
5 * Copyright (C) 2001 Peter Kelly ([email protected])
6 *
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2 of the License, or (at your option) any later version.
11 *
12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
16 *
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this library; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20 *
21 */
22
23#include "config.h"
24#include "debugger.h"
25#include "ustring.h"
26
27#include "internal.h"
28
29using namespace KJS;
30
31// ------------------------------ Debugger -------------------------------------
32
33namespace KJS {
34 struct AttachedInterpreter
35 {
36 public:
37 AttachedInterpreter(Interpreter *i, AttachedInterpreter *ai) : interp(i), next(ai) { ++Debugger::debuggersPresent; }
38 ~AttachedInterpreter() { --Debugger::debuggersPresent; }
39 Interpreter *interp;
40 AttachedInterpreter *next;
41 };
42
43}
44
45int Debugger::debuggersPresent = 0;
46
47Debugger::Debugger()
48{
49 rep = new DebuggerImp();
50}
51
52Debugger::~Debugger()
53{
54 detach(0);
55 delete rep;
56}
57
58void Debugger::attach(Interpreter* interp)
59{
60 Debugger *other = interp->debugger();
61 if (other == this)
62 return;
63 if (other)
64 other->detach(interp);
65 interp->setDebugger(this);
66 rep->interps = new AttachedInterpreter(interp, rep->interps);
67}
68
69void Debugger::detach(Interpreter* interp)
70{
71 // iterate the addresses where AttachedInterpreter pointers are stored
72 // so we can unlink items from the list
73 AttachedInterpreter **p = &rep->interps;
74 AttachedInterpreter *q;
75 while ((q = *p)) {
76 if (!interp || q->interp == interp) {
77 *p = q->next;
78 q->interp->setDebugger(0);
79 delete q;
80 } else
81 p = &q->next;
82 }
83
84 if (interp)
85 latestExceptions.remove(interp);
86 else
87 latestExceptions.clear();
88}
89
90bool Debugger::hasHandledException(ExecState *exec, JSValue *exception)
91{
92 if (latestExceptions.get(exec->dynamicInterpreter()).get() == exception)
93 return true;
94
95 latestExceptions.set(exec->dynamicInterpreter(), exception);
96 return false;
97}
98
99bool Debugger::sourceParsed(ExecState */*exec*/, int /*sourceId*/, const UString &/*sourceURL*/,
100 const UString &/*source*/, int /*startingLineNumber*/, int /*errorLine*/, const UString & /*errorMsg*/)
101{
102 return true;
103}
104
105bool Debugger::sourceUnused(ExecState */*exec*/, int /*sourceId*/)
106{
107 return true;
108}
109
110bool Debugger::exception(ExecState */*exec*/, int /*sourceId*/, int /*lineno*/,
111 JSValue */*exception*/)
112{
113 return true;
114}
115
116bool Debugger::atStatement(ExecState */*exec*/, int /*sourceId*/, int /*firstLine*/,
117 int /*lastLine*/)
118{
119 return true;
120}
121
122bool Debugger::callEvent(ExecState */*exec*/, int /*sourceId*/, int /*lineno*/,
123 JSObject */*function*/, const List &/*args*/)
124{
125 return true;
126}
127
128bool Debugger::returnEvent(ExecState */*exec*/, int /*sourceId*/, int /*lineno*/,
129 JSObject */*function*/)
130{
131 return true;
132}
133
Note: See TracBrowser for help on using the repository browser.