I found a hang in lldb-mi's -var-update. It checks to see if a var changed, then it checks each of the children recursively. If a child is a pointer back to a parent, as in this case:
struct complex_type { int i; struct { long l; } inner; struct complex_type *complex_ptr; }; void var_update_test(void) { struct complex_type complx_array[2]; complx_array[0].i = 4; complx_array[0].inner.l = 4; complx_array[0].complex_ptr = &complx_array[1]; complx_array[1].i = 5; complx_array[1].inner.l = 5; complx_array[1].complex_ptr = &complx_array[0]; the code in CMICmdCmdVarUpdate::ExamineSBValueForChange will get into an infinite loop. const MIuint nChildren = vrwValue.GetNumChildren(); for (MIuint i = 0; i < nChildren; ++i) { lldb::SBValue member = vrwValue.GetChildAtIndex(i); if (!member.IsValid()) continue; if (member.GetValueDidChange()) { vrwbChanged = true; return MIstatus::success; } else if (ExamineSBValueForChange(member, vrwbChanged) && vrwbChanged) // Handle composite types (i.e. struct or arrays) return MIstatus::success; } I've got a patch that disables checking a pointer's children. I'll put it up on phabricator today. Ted -- Qualcomm Innovation Center, Inc. The Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project _______________________________________________ lldb-dev mailing list lldb-dev@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev