This is an archived page. It's not actively maintained.

Debugging Tips

Printing CData and CType

Currently console.log doesn't show type information of CData. Running  the following code shows only partial value information.

let { ctypes } = Components.utils.import("resource://gre/modules/ctypes.jsm", {});
let i = ctypes.int32_t(10);
console.log(i);
let Point = ctypes.StructType("Point", [{ x: ctypes.int32_t }, { y: ctypes.int32_t }])
let p = Point(10, 20);
console.log(p);
let pp = p.address();
console.log(pp);

The result will be as following:

CData { value: 10 }
CData { x: 10, y: 20 }
CData { contents: CData }

To see more descriptive information, you can use .toSource().

let { ctypes } = Components.utils.import("resource://gre/modules/ctypes.jsm", {});
let i = ctypes.int32_t(10);
console.log(i.toSource());
let Point = ctypes.StructType("Point", [{ x: ctypes.int32_t }, { y: ctypes.int32_t }])
let p = Point(10, 20);
console.log(p.toSource());
let pp = p.address();
console.log(pp.toSource());

The result will be :

ctypes.int32_t(10)
Point(10, 20)
Point.ptr(ctypes.UInt64("0x15fdafb08"))

To see the complete type information, you can use .constructor.toSource(), to print the source of CType.

let { ctypes } = Components.utils.import("resource://gre/modules/ctypes.jsm", {});
let i = ctypes.int32_t(10);
console.log(i.constructor.toSource());
let Point = ctypes.StructType("Point", [{ x: ctypes.int32_t }, { y: ctypes.int32_t }])
let p = Point(10, 20);
console.log(p.constructor.toSource());
let pp = p.address();
console.log(pp.constructor.toSource());

The result will be as per the following:

ctypes.int32_t
ctypes.StructType("Point", [{ "x": ctypes.int32_t }, { "y": ctypes.int32_t }])
ctypes.StructType("Point", [{ "x": ctypes.int32_t }, { "y": ctypes.int32_t }]).ptr