Use allm info to attach to existing threads

This remove reliance on the procfs for figuring out what threads are
already active when we attach to a running process. The allm linked list
will be present to matter what OS we're on, whereas procfs will not be
present everywhere.

This is the first in a series of steps to support more platforms.
This commit is contained in:
Derek Parker 2014-12-02 10:15:51 -06:00
parent c4f79a36e5
commit 5ece8d3b69

@ -80,7 +80,25 @@ func (bpe BreakPointExistsError) Error() string {
} }
func Attach(pid int) (*DebuggedProcess, error) { func Attach(pid int) (*DebuggedProcess, error) {
return newDebugProcess(pid, true) dbp, err := newDebugProcess(pid, true)
if err != nil {
return nil, err
}
// Attach to all currently active threads.
allm, err := dbp.CurrentThread.AllM()
if err != nil {
return nil, err
}
for _, m := range allm {
if m.procid == 0 {
continue
}
_, err := dbp.AttachThread(m.procid)
if err != nil {
return nil, err
}
}
return dbp, nil
} }
func Launch(cmd []string) (*DebuggedProcess, error) { func Launch(cmd []string) (*DebuggedProcess, error) {
@ -135,14 +153,6 @@ func newDebugProcess(pid int, attach bool) (*DebuggedProcess, error) {
return nil, err return nil, err
} }
// Attach to all currently active threads.
for _, tid := range threadIds(pid) {
_, err := dbp.AttachThread(tid)
if err != nil {
return nil, err
}
}
return &dbp, nil return &dbp, nil
} }