| 336 | } |
| 337 | |
| 338 | rdcarray<StackFrame> Connection::GetCallStack(threadID thread) |
| 339 | { |
| 340 | Command cmd(CommandSet::ThreadReference, 6); |
| 341 | // always fetch full stack |
| 342 | cmd.GetData().Write(thread).Write<int32_t>(0).Write<int32_t>(-1); |
| 343 | |
| 344 | if(!SendReceive(cmd)) |
| 345 | return {}; |
| 346 | |
| 347 | rdcarray<StackFrame> ret; |
| 348 | CommandData data = cmd.GetData(); |
| 349 | ReadVector<StackFrame>(data, ret, |
| 350 | [](CommandData &d, StackFrame &f) { d.Read(f.id).Read(f.location); }); |
| 351 | data.Done(); |
| 352 | |
| 353 | // simplify error handling, if the stack came back as nonsense then clear it |
| 354 | if(!ret.empty() && ret[0].id == 0) |
| 355 | ret.clear(); |
| 356 | |
| 357 | return ret; |
| 358 | } |
| 359 | |
| 360 | objectID Connection::GetThis(threadID thread, frameID frame) |
| 361 | { |