Add support in dbg.debug_obj for printing the obj body.
This commit is contained in:
parent
d9e3fb2c5d
commit
7ccdb88374
2 changed files with 19 additions and 4 deletions
|
@ -9,7 +9,7 @@ native "rust" mod rustrt {
|
||||||
fn debug_opaque[T](&T x);
|
fn debug_opaque[T](&T x);
|
||||||
fn debug_box[T](@T x);
|
fn debug_box[T](@T x);
|
||||||
fn debug_tag[T](&T x);
|
fn debug_tag[T](&T x);
|
||||||
fn debug_obj[T](&T x, uint nmethods);
|
fn debug_obj[T](&T x, uint nmethods, uint nbytes);
|
||||||
fn debug_fn[T](&T x);
|
fn debug_fn[T](&T x);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -33,8 +33,17 @@ fn debug_tag[T](&T x) {
|
||||||
rustrt.debug_tag[T](x);
|
rustrt.debug_tag[T](x);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn debug_obj[T](&T x, uint nmethods) {
|
/**
|
||||||
rustrt.debug_obj[T](x, nmethods);
|
* `nmethods` is the number of methods we expect the object to have. The
|
||||||
|
* runtime will print this many words of the obj vtbl).
|
||||||
|
*
|
||||||
|
* `nbytes` is the number of bytes of body data we expect the object to have.
|
||||||
|
* The runtime will print this many bytes of the obj body. You probably want
|
||||||
|
* this to at least be 4u, since an implicit captured tydesc pointer sits in
|
||||||
|
* the front of any obj's data tuple.x
|
||||||
|
*/
|
||||||
|
fn debug_obj[T](&T x, uint nmethods, uint nbytes) {
|
||||||
|
rustrt.debug_obj[T](x, nmethods, nbytes);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn debug_fn[T](&T x) {
|
fn debug_fn[T](&T x) {
|
||||||
|
|
|
@ -308,7 +308,8 @@ struct rust_obj {
|
||||||
};
|
};
|
||||||
|
|
||||||
extern "C" CDECL void
|
extern "C" CDECL void
|
||||||
debug_obj(rust_task *task, type_desc *t, rust_obj *obj, size_t nmethods)
|
debug_obj(rust_task *task, type_desc *t, rust_obj *obj,
|
||||||
|
size_t nmethods, size_t nbytes)
|
||||||
{
|
{
|
||||||
task->log(rust_log::STDLIB,
|
task->log(rust_log::STDLIB,
|
||||||
"debug_obj with %" PRIdPTR " methods", nmethods);
|
"debug_obj with %" PRIdPTR " methods", nmethods);
|
||||||
|
@ -318,6 +319,11 @@ debug_obj(rust_task *task, type_desc *t, rust_obj *obj, size_t nmethods)
|
||||||
|
|
||||||
for (uintptr_t *p = obj->vtbl; p < obj->vtbl + nmethods; ++p)
|
for (uintptr_t *p = obj->vtbl; p < obj->vtbl + nmethods; ++p)
|
||||||
task->log(rust_log::STDLIB, " vtbl word: 0x%" PRIxPTR, *p);
|
task->log(rust_log::STDLIB, " vtbl word: 0x%" PRIxPTR, *p);
|
||||||
|
|
||||||
|
for (uintptr_t i = 0; i < nbytes; ++i)
|
||||||
|
task->log(rust_log::STDLIB,
|
||||||
|
" body byte %" PRIdPTR ": 0x%" PRIxPTR,
|
||||||
|
i, obj->body->data[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct rust_fn {
|
struct rust_fn {
|
||||||
|
|
Loading…
Reference in a new issue