Source code

Revision control

Copy as Markdown

Other Tools

/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*-
* vim: set ts=8 sts=2 et sw=2 tw=80:
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
/* Functions to print out values during debugging. */
#ifndef js_friend_DumpFunctions_h
#define js_friend_DumpFunctions_h
#include "mozilla/Attributes.h"
#include "mozilla/MemoryReporting.h" // mozilla::MallocSizeOf
#include <stddef.h> // size_t
#include <stdio.h> // FILE
#include "jstypes.h" // JS_PUBLIC_API
#include "js/Printer.h" // js::GenericPrinter
#include "js/Utility.h" // JS::UniqueChars
class JS_PUBLIC_API JSAtom;
struct JS_PUBLIC_API JSContext;
class JS_PUBLIC_API JSObject;
class JS_PUBLIC_API JSScript;
class JS_PUBLIC_API JSString;
namespace JS {
class JS_PUBLIC_API BigInt;
class JS_PUBLIC_API PropertyKey;
class JS_PUBLIC_API Value;
} // namespace JS
namespace js {
class InterpreterFrame;
} // namespace js
namespace JS {
/** Exposed for DumpJSStack */
extern JS_PUBLIC_API JS::UniqueChars FormatStackDump(JSContext* cx,
bool showArgs,
bool showLocals,
bool showThisProps);
} // namespace JS
namespace js {
/*
* These functions are FRIEND_API to help the debugger find them and to support
* temporarily hacking js::Dump* calls into other code. Note that there are
* overloads that do not require the FILE* parameter, which will default to
* stderr.
*
* These functions are no-ops unless built with DEBUG or JS_JITSPEW.
*/
extern JS_PUBLIC_API void DumpString(JSString* str, FILE* fp);
extern JS_PUBLIC_API void DumpAtom(JSAtom* atom, FILE* fp);
extern JS_PUBLIC_API void DumpObject(JSObject* obj, FILE* fp);
extern JS_PUBLIC_API void DumpChars(const char16_t* s, size_t n, FILE* fp);
// DumpBigInt() outputs the value in decimal if it fits within a 64-bit int, and
// otherwise in hex, prefixed with "0x". In both cases the "n" is appended.
extern JS_PUBLIC_API void DumpBigInt(JS::BigInt* bi, FILE* fp);
extern JS_PUBLIC_API void DumpValue(const JS::Value& val, FILE* fp);
extern JS_PUBLIC_API void DumpId(JS::PropertyKey id, FILE* fp);
extern JS_PUBLIC_API bool DumpPC(JSContext* cx, FILE* fp);
extern JS_PUBLIC_API bool DumpScript(JSContext* cx, JSScript* scriptArg,
FILE* fp);
// Versions for use directly in a debugger (default parameters are not handled
// well in gdb; built-in handles like stderr are not handled well in lldb.)
extern JS_PUBLIC_API void DumpString(JSString* str);
extern JS_PUBLIC_API void DumpAtom(JSAtom* atom);
extern JS_PUBLIC_API void DumpObject(JSObject* obj);
extern JS_PUBLIC_API void DumpChars(const char16_t* s, size_t n);
extern JS_PUBLIC_API void DumpBigInt(JS::BigInt* bi);
extern JS_PUBLIC_API void DumpValue(const JS::Value& val);
extern JS_PUBLIC_API void DumpId(JS::PropertyKey id);
extern JS_PUBLIC_API void DumpInterpreterFrame(
JSContext* cx, InterpreterFrame* start = nullptr);
extern JS_PUBLIC_API bool DumpPC(JSContext* cx);
extern JS_PUBLIC_API bool DumpScript(JSContext* cx, JSScript* scriptArg);
// DumpBacktrace(), unlike the other dump functions, always dumps a backtrace --
// regardless of DEBUG or JS_JITSPEW.
extern JS_PUBLIC_API void DumpBacktrace(JSContext* cx, FILE* fp);
extern JS_PUBLIC_API void DumpBacktrace(JSContext* cx, GenericPrinter& out);
extern JS_PUBLIC_API void DumpBacktrace(JSContext* cx);
enum DumpHeapNurseryBehaviour {
CollectNurseryBeforeDump,
IgnoreNurseryObjects
};
/**
* Dump the complete object graph of heap-allocated things.
* fp is the file for the dump output.
*/
extern JS_PUBLIC_API void DumpHeap(
JSContext* cx, FILE* fp, DumpHeapNurseryBehaviour nurseryBehaviour,
mozilla::MallocSizeOf mallocSizeOf = nullptr);
extern JS_PUBLIC_API void DumpFmt(FILE* fp, const char* fmt, ...)
MOZ_FORMAT_PRINTF(2, 3);
extern JS_PUBLIC_API void DumpFmt(const char* fmt, ...) MOZ_FORMAT_PRINTF(1, 2);
} // namespace js
#endif // js_friend_DumpFunctions_h