diff --git a/packages/node-integration-tests/suites/anr/test.ts b/packages/node-integration-tests/suites/anr/test.ts index a070f611a0ab..011a0371a5d9 100644 --- a/packages/node-integration-tests/suites/anr/test.ts +++ b/packages/node-integration-tests/suites/anr/test.ts @@ -95,6 +95,26 @@ conditionalTest({ min: 16 })('should report ANR when event loop blocked', () => }); }); + test('With --inspect', done => { + expect.assertions(7); + + const testScriptPath = path.resolve(__dirname, 'basic.js'); + + childProcess.exec(`node --inspect ${testScriptPath}`, { encoding: 'utf8' }, (_, stdout) => { + const [event] = parseJsonLines<[Event]>(stdout, 1); + + expect(event.exception?.values?.[0].mechanism).toEqual({ type: 'ANR' }); + expect(event.exception?.values?.[0].type).toEqual('ApplicationNotResponding'); + expect(event.exception?.values?.[0].value).toEqual('Application Not Responding for at least 200 ms'); + expect(event.exception?.values?.[0].stacktrace?.frames?.length).toBeGreaterThan(4); + + expect(event.exception?.values?.[0].stacktrace?.frames?.[2].function).toEqual('?'); + expect(event.exception?.values?.[0].stacktrace?.frames?.[3].function).toEqual('longWork'); + + done(); + }); + }); + test('With session', done => { expect.assertions(9); diff --git a/packages/node/src/integrations/anr/index.ts b/packages/node/src/integrations/anr/index.ts index cf1f1cd6cab7..70c20962fca2 100644 --- a/packages/node/src/integrations/anr/index.ts +++ b/packages/node/src/integrations/anr/index.ts @@ -111,7 +111,9 @@ export class Anr implements Integration { if (options.captureStackTrace) { // eslint-disable-next-line @typescript-eslint/no-var-requires const inspector: InspectorApi = require('inspector'); - inspector.open(0); + if (!inspector.url()) { + inspector.open(0); + } } const { Worker } = getWorkerThreads();