在 C++ 中打印处理程序 class 的名称
Print name of Handler class in C++
我是 C++ 的新手,正在尝试理解一些代码(NS2 中的数据包调度)。
在某个时刻,数据包通过以下代码:
void
Scheduler::dispatch(Event* p, double t)
{
if ((t < clock_) && (p->uid_ != 0)) {
fprintf(stderr, "ns: scheduler going backwards in time from %f to %f.\n", clock_, t);
dumpq();
}
if (p->uid_ != 0) {
clock_ = t;
p->uid_ = -p->uid_; // being dispatched
p->handler_->handle(p); // dispatch
} else {
fprintf(stderr, "Warning: discarding Event without an a valid id\n");
}
}
我的问题:有没有一种简单的方法可以让我在这里找到 handler_
的 class 是什么以及我应该在哪里寻找 handle(p)
?
is there an easy way for me to find out here what the class of handler_ is and where I should look for handle(p)?
在p->handler_->handle(p);
处设置断点并单步执行。
或者,在 gdb
中,执行 info symbol p->handler_->handle
。
或将 nullptr
传递给 handle
希望它崩溃并转储核心或显示堆栈跟踪。
您还可以获得对象的 class mangled 名称,例如 typeid(*p->handler_).name()
.
我是 C++ 的新手,正在尝试理解一些代码(NS2 中的数据包调度)。 在某个时刻,数据包通过以下代码:
void
Scheduler::dispatch(Event* p, double t)
{
if ((t < clock_) && (p->uid_ != 0)) {
fprintf(stderr, "ns: scheduler going backwards in time from %f to %f.\n", clock_, t);
dumpq();
}
if (p->uid_ != 0) {
clock_ = t;
p->uid_ = -p->uid_; // being dispatched
p->handler_->handle(p); // dispatch
} else {
fprintf(stderr, "Warning: discarding Event without an a valid id\n");
}
}
我的问题:有没有一种简单的方法可以让我在这里找到 handler_
的 class 是什么以及我应该在哪里寻找 handle(p)
?
is there an easy way for me to find out here what the class of handler_ is and where I should look for handle(p)?
在p->handler_->handle(p);
处设置断点并单步执行。
或者,在 gdb
中,执行 info symbol p->handler_->handle
。
或将 nullptr
传递给 handle
希望它崩溃并转储核心或显示堆栈跟踪。
您还可以获得对象的 class mangled 名称,例如 typeid(*p->handler_).name()
.