Skip to content

Commit 77ef8f8

Browse files
MartinSherburnfacebook-github-bot
authored andcommitted
When debugger is attached continue to receive console messages
Summary: I noticed an issue when the hermes debugger was attached. Console messages would no longer appear in the terminal. This is because the hermes inspector overrides the console object with its own to intercept messages and send them to the debug client. With this change I made it so that messages are sent to the original console as well instead of completely replacing it. Changelog: [General][Fixed] - When Hermes debugger is enabled continue to send log messages to the console Reviewed By: mhorowitz Differential Revision: D21509895 fbshipit-source-id: 6d91c4b82682e404679533be14b3e5f12e687e79
1 parent e3f4a7b commit 77ef8f8

File tree

2 files changed

+36
-17
lines changed

2 files changed

+36
-17
lines changed

ReactCommon/hermes/inspector/Inspector.cpp

+35-17
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,7 @@ Inspector::~Inspector() {
137137

138138
void Inspector::installConsoleFunction(
139139
jsi::Object &console,
140+
std::shared_ptr<jsi::Object> &originalConsole,
140141
const std::string &name,
141142
const std::string &chromeTypeDefault = "") {
142143
jsi::Runtime &rt = adapter_->getRuntime();
@@ -150,11 +151,22 @@ void Inspector::installConsoleFunction(
150151
rt,
151152
nameID,
152153
1,
153-
[weakInspector, chromeType](
154+
[weakInspector, originalConsole, name, chromeType](
154155
jsi::Runtime &runtime,
155156
const jsi::Value &thisVal,
156157
const jsi::Value *args,
157158
size_t count) {
159+
if (originalConsole) {
160+
auto val = originalConsole->getProperty(runtime, name.c_str());
161+
if (val.isObject()) {
162+
auto obj = val.getObject(runtime);
163+
if (obj.isFunction(runtime)) {
164+
auto func = obj.getFunction(runtime);
165+
func.call(runtime, args, count);
166+
}
167+
}
168+
}
169+
158170
if (auto inspector = weakInspector.lock()) {
159171
jsi::Array argsArray(runtime, count);
160172
for (size_t index = 0; index < count; ++index)
@@ -170,22 +182,28 @@ void Inspector::installConsoleFunction(
170182
void Inspector::installLogHandler() {
171183
jsi::Runtime &rt = adapter_->getRuntime();
172184
auto console = jsi::Object(rt);
173-
installConsoleFunction(console, "assert");
174-
installConsoleFunction(console, "clear");
175-
installConsoleFunction(console, "debug");
176-
installConsoleFunction(console, "dir");
177-
installConsoleFunction(console, "dirxml");
178-
installConsoleFunction(console, "error");
179-
installConsoleFunction(console, "group", "startGroup");
180-
installConsoleFunction(console, "groupCollapsed", "startGroupCollapsed");
181-
installConsoleFunction(console, "groupEnd", "endGroup");
182-
installConsoleFunction(console, "info");
183-
installConsoleFunction(console, "log");
184-
installConsoleFunction(console, "profile");
185-
installConsoleFunction(console, "profileEnd");
186-
installConsoleFunction(console, "table");
187-
installConsoleFunction(console, "trace");
188-
installConsoleFunction(console, "warn", "warning");
185+
auto val = rt.global().getProperty(rt, "console");
186+
std::shared_ptr<jsi::Object> originalConsole;
187+
if (val.isObject()) {
188+
originalConsole = std::make_shared<jsi::Object>(val.getObject(rt));
189+
}
190+
installConsoleFunction(console, originalConsole, "assert");
191+
installConsoleFunction(console, originalConsole, "clear");
192+
installConsoleFunction(console, originalConsole, "debug");
193+
installConsoleFunction(console, originalConsole, "dir");
194+
installConsoleFunction(console, originalConsole, "dirxml");
195+
installConsoleFunction(console, originalConsole, "error");
196+
installConsoleFunction(console, originalConsole, "group", "startGroup");
197+
installConsoleFunction(
198+
console, originalConsole, "groupCollapsed", "startGroupCollapsed");
199+
installConsoleFunction(console, originalConsole, "groupEnd", "endGroup");
200+
installConsoleFunction(console, originalConsole, "info");
201+
installConsoleFunction(console, originalConsole, "log");
202+
installConsoleFunction(console, originalConsole, "profile");
203+
installConsoleFunction(console, originalConsole, "profileEnd");
204+
installConsoleFunction(console, originalConsole, "table");
205+
installConsoleFunction(console, originalConsole, "trace");
206+
installConsoleFunction(console, originalConsole, "warn", "warning");
189207
rt.global().setProperty(rt, "console", console);
190208
}
191209

ReactCommon/hermes/inspector/Inspector.h

+1
Original file line numberDiff line numberDiff line change
@@ -292,6 +292,7 @@ class Inspector : public facebook::hermes::debugger::EventObserver,
292292

293293
void installConsoleFunction(
294294
jsi::Object &console,
295+
std::shared_ptr<jsi::Object> &originalConsole,
295296
const std::string &name,
296297
const std::string &chromeType);
297298

0 commit comments

Comments
 (0)