From a4c7eba4745454fd1dead02bab0b5f345528b6bb Mon Sep 17 00:00:00 2001 From: legendecas Date: Mon, 2 Dec 2019 00:13:33 +0800 Subject: [PATCH] src: prevent hard coding stack trace limit Refer to Environment::stack_trace_limit() while printing fresh stacktraces in c++ land. PR-URL: https://github.com/nodejs/node/pull/30752 Reviewed-By: Anna Henningsen Reviewed-By: Denys Otrishko Reviewed-By: Ruben Bridgewater --- src/env.cc | 12 ++++++------ src/env.h | 2 ++ src/node_errors.cc | 2 +- .../message/throw_error_with_getter_throw_traced.out | 1 + test/message/throw_null_traced.out | 1 + test/message/throw_undefined_traced.out | 1 + 6 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/env.cc b/src/env.cc index 4eb30b315e9924..3dbc56b7c56bee 100644 --- a/src/env.cc +++ b/src/env.cc @@ -588,9 +588,9 @@ void Environment::PrintSyncTrace() const { fprintf( stderr, "(node:%d) WARNING: Detected use of sync API\n", uv_os_getpid()); - PrintStackTrace( - isolate(), - StackTrace::CurrentStackTrace(isolate(), 10, StackTrace::kDetailed)); + PrintStackTrace(isolate(), + StackTrace::CurrentStackTrace( + isolate(), stack_trace_limit(), StackTrace::kDetailed)); } void Environment::RunCleanup() { @@ -943,9 +943,9 @@ void Environment::Exit(int exit_code) { fprintf( stderr, "WARNING: Exited the environment with code %d\n", exit_code); - PrintStackTrace( - isolate(), - StackTrace::CurrentStackTrace(isolate(), 10, StackTrace::kDetailed)); + PrintStackTrace(isolate(), + StackTrace::CurrentStackTrace( + isolate(), stack_trace_limit(), StackTrace::kDetailed)); } if (is_main_thread()) { stop_sub_worker_contexts(); diff --git a/src/env.h b/src/env.h index 8d2404264cf270..1ae707428230e8 100644 --- a/src/env.h +++ b/src/env.h @@ -1230,6 +1230,8 @@ class Environment : public MemoryRetainer { inline AsyncRequest* thread_stopper() { return &thread_stopper_; } + inline int32_t stack_trace_limit() const { return 10; } + #if HAVE_INSPECTOR void set_coverage_connection( std::unique_ptr connection); diff --git a/src/node_errors.cc b/src/node_errors.cc index b86ccc3062191a..6d69075114a0ff 100644 --- a/src/node_errors.cc +++ b/src/node_errors.cc @@ -145,7 +145,7 @@ static std::string GetErrorSource(Isolate* isolate, } void PrintStackTrace(Isolate* isolate, Local stack) { - for (int i = 0; i < stack->GetFrameCount() - 1; i++) { + for (int i = 0; i < stack->GetFrameCount(); i++) { Local stack_frame = stack->GetFrame(isolate, i); node::Utf8Value fn_name_s(isolate, stack_frame->GetFunctionName()); node::Utf8Value script_name(isolate, stack_frame->GetScriptName()); diff --git a/test/message/throw_error_with_getter_throw_traced.out b/test/message/throw_error_with_getter_throw_traced.out index 8f89c09b24b26d..9b8502d2bc9c4d 100644 --- a/test/message/throw_error_with_getter_throw_traced.out +++ b/test/message/throw_error_with_getter_throw_traced.out @@ -10,3 +10,4 @@ Thrown at: at Module.load (internal/modules/cjs/loader.js:*:*) at Module._load (internal/modules/cjs/loader.js:*:*) at executeUserEntryPoint (internal/modules/run_main.js:*:*) + at internal/main/run_main_module.js:*:* diff --git a/test/message/throw_null_traced.out b/test/message/throw_null_traced.out index 887de70ef80335..bf8d71d7ad7a4d 100644 --- a/test/message/throw_null_traced.out +++ b/test/message/throw_null_traced.out @@ -10,3 +10,4 @@ Thrown at: at Module.load (internal/modules/cjs/loader.js:*:*) at Module._load (internal/modules/cjs/loader.js:*:*) at executeUserEntryPoint (internal/modules/run_main.js:*:*) + at internal/main/run_main_module.js:*:* diff --git a/test/message/throw_undefined_traced.out b/test/message/throw_undefined_traced.out index 81e2e20c5ff6e5..22040aa9226139 100644 --- a/test/message/throw_undefined_traced.out +++ b/test/message/throw_undefined_traced.out @@ -10,3 +10,4 @@ Thrown at: at Module.load (internal/modules/cjs/loader.js:*:*) at Module._load (internal/modules/cjs/loader.js:*:*) at executeUserEntryPoint (internal/modules/run_main.js:*:*) + at internal/main/run_main_module.js:*:*