1
0
Fork 0

Implements qemu debug support

timestamps
dump_stack() 2018-11-25 13:12:06 +00:00
parent 44aa01856f
commit 4a247b229a
2 changed files with 56 additions and 0 deletions

View File

@ -67,6 +67,9 @@ type QemuSystem struct {
Cpus int Cpus int
Memory int Memory int
debug bool
gdb string // tcp::1234
// Timeout works after Start invocation // Timeout works after Start invocation
Timeout time.Duration Timeout time.Duration
KilledByTimeout bool KilledByTimeout bool
@ -184,6 +187,10 @@ func (q *QemuSystem) Start() (err error) {
"-netdev", "user,id=n1," + hostfwd, "-netdev", "user,id=n1," + hostfwd,
} }
if q.debug {
qemuArgs = append(qemuArgs, "-gdb", q.gdb)
}
if q.kernel.InitrdPath != "" { if q.kernel.InitrdPath != "" {
qemuArgs = append(qemuArgs, "-initrd", q.kernel.InitrdPath) qemuArgs = append(qemuArgs, "-initrd", q.kernel.InitrdPath)
} }
@ -338,3 +345,8 @@ func (q *QemuSystem) CopyAndRun(user, path string) (output string, err error) {
return q.Command(user, "chmod +x "+remotePath+" && "+remotePath) return q.Command(user, "chmod +x "+remotePath+" && "+remotePath)
} }
func (q *QemuSystem) Debug(conn string) {
q.debug = true
q.gdb = conn
}

View File

@ -299,3 +299,47 @@ func TestQemuSystemRun(t *testing.T) {
} }
} }
func openedPort(port int) bool {
conn, err := net.Dial("tcp", fmt.Sprintf(":%d", port))
if err != nil {
return false
}
conn.Close()
return true
}
func TestQemuSystemDebug(t *testing.T) {
t.Parallel()
kernel := Kernel{
KernelPath: testConfigVmlinuz,
InitrdPath: testConfigInitrd,
}
q, err := NewQemuSystem(X86_64, kernel, testConfigRootfs)
if err != nil {
return
}
port := 45256
q.Debug(fmt.Sprintf("tcp::%d", port))
if openedPort(port) {
t.Fatal("Port opened before qemu starts")
}
if err = q.Start(); err != nil {
return
}
defer q.Stop()
if !openedPort(port) {
t.Fatal("Qemu debug port does not opened")
}
q.Stop()
if openedPort(port) {
t.Fatal("Qemu listens after die")
}
}