aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRoy Frostig <[email protected]>2010-08-24 19:49:39 -0700
committerRoy Frostig <[email protected]>2010-08-24 19:49:39 -0700
commit7ccdb883748a66122b88663139920db4f15a6920 (patch)
tree8f9047cd531e21629df652f81592da32170a2182 /src
parentAdd std.dbg module for inspecting rust values in memory. (diff)
downloadrust-7ccdb883748a66122b88663139920db4f15a6920.tar.xz
rust-7ccdb883748a66122b88663139920db4f15a6920.zip
Add support in dbg.debug_obj for printing the obj body.
Diffstat (limited to 'src')
-rw-r--r--src/lib/dbg.rs15
-rw-r--r--src/rt/rust_builtin.cpp8
2 files changed, 19 insertions, 4 deletions
diff --git a/src/lib/dbg.rs b/src/lib/dbg.rs
index 195a693a..3aaf3add 100644
--- a/src/lib/dbg.rs
+++ b/src/lib/dbg.rs
@@ -9,7 +9,7 @@ native "rust" mod rustrt {
fn debug_opaque[T](&T x);
fn debug_box[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);
}
@@ -33,8 +33,17 @@ fn debug_tag[T](&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) {
diff --git a/src/rt/rust_builtin.cpp b/src/rt/rust_builtin.cpp
index 8dd3f1a4..e8bc9fc7 100644
--- a/src/rt/rust_builtin.cpp
+++ b/src/rt/rust_builtin.cpp
@@ -308,7 +308,8 @@ struct rust_obj {
};
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,
"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)
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 {