writer.endRepr();
}
- void visit(StackFrame* frame) {
- writer.beginStackFrame();
- if (frame->module != NULL) {
- writer.beginStackFrameModule();
- _visit(frame->module);
- writer.endStackFrameModule();
- }
- if (frame->function != NULL) {
- writer.beginStackFrameFunction();
- _visit(frame->function);
- writer.endStackFrameFunction();
- }
- if (frame->filename != NULL) {
- writer.beginStackFrameFilename();
- _visit(frame->filename);
- writer.endStackFrameFilename();
- }
- if (frame->linenumber != NULL) {
- writer.beginStackFrameLinenumber();
- _visit(frame->linenumber);
- writer.endStackFrameLinenumber();
- }
- if (frame->offset != NULL) {
- writer.beginStackFrameOffset();
- _visit(frame->offset);
- writer.endStackFrameOffset();
- }
- writer.endStackFrame();
- }
-
- void visit(Backtrace * backtrace) {
- writer.beginBacktrace();
- for (int i =0; i < backtrace->frames.size(); i++) {
- visit(backtrace->frames[i]);
- }
- writer.endBacktrace();
- }
-
void visit(Call *call) {
unsigned call_no = writer.beginEnter(call->sig, call->thread_id);
if (call->backtrace != NULL) {
- visit(call->backtrace);
+ writer.beginBacktrace(call->backtrace->size());
+ for (unsigned i = 0; i < call->backtrace->size(); ++i) {
+ writer.writeStackFrame((*call->backtrace)[i]);
+ }
+ writer.endBacktrace();
}
for (unsigned i = 0; i < call->args.size(); ++i) {
if (call->args[i].value) {