void UpdateThread(Process thread)
        {
            TreeRowReference row = (TreeRowReference)thread_rows[thread];
            TreeIter iter;

            if (row != null && store.GetIter (out iter, row.Path)) {
                store.SetValue (iter, 0, thread.ID);
                store.SetValue (iter, 1, thread.PID);
                store.SetValue (iter, 2, thread.State.ToString());

                string location;
                if (thread.IsStopped)
                    location = thread.GetBacktrace().Frames[0].SourceAddress.Name;
                else
                    location = "";

                store.SetValue (iter, 3, location);
            }
            else {
                AddThread (thread);
            }
        }
 void AddThread(Process thread)
 {
     TreeIter iter;
     store.Append (out iter);
     store.SetValue (iter, 0, new GLib.Value (thread.ID));
     store.SetValue (iter, 1, new GLib.Value (thread.PID));
     store.SetValue (iter, 2, new GLib.Value (thread.State.ToString()));
     if (thread.IsStopped)
         store.SetValue (iter, 3, new GLib.Value (thread.GetBacktrace().Frames[0].SourceAddress.Name));
     else
         store.SetValue (iter, 3, new GLib.Value (""));
     thread_rows.Add (thread, new TreeRowReference (store, store.GetPath (iter)));
 }