-// xds-gdb: a wrapper on gdb tool for X(cross) Development System.
+/*
+ * Copyright (C) 2017 "IoT.bzh"
+ * Author Sebastien Douheret <sebastien@iot.bzh>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ *
+ * xds-gdb: a wrapper on gdb tool for X(cross) Development System.
+ */
+
package main
import (
// Application details
const (
- appCopyright = "Apache-2.0"
+ appCopyright = "Copyright (C) 2017 IoT.bzh - Apache-2.0"
defaultLogLevel = "warning"
)
},
EnvVar{
Name: "XDS_LOGFILE",
- Usage: "logging file",
+ Usage: "logging file (default: " + logFileInitial + ")",
Destination: &logFile,
},
EnvVar{
// Handle client tty / pts
if clientPty != "" {
- log.Infoln("Client tty detected: %v\n", clientPty)
+ log.Infoln("Client tty detected: %v", clientPty)
cpFd, err := os.OpenFile(clientPty, os.O_RDWR, 0)
if err != nil {
sc := bufio.NewScanner(reader)
for sc.Scan() {
data := sc.Text()
- iosk.Emit(apiv1.ExecInferiorInEvent, data+"\n")
+ iosk.Emit(xaapiv1.ExecInferiorInEvent, data+"\n")
log.Debugf("Inferior IN: <%v>", data)
}
if sc.Err() != nil {
paranoia := 600
reader := bufio.NewReader(os.Stdin)
+ // Enable workaround to correctly close connection
+ // except if XDS_GDBSERVER_EXIT_NOFIX is defined
+ _, gdbExitNoFix := os.LookupEnv("XDS_GDBSERVER_EXIT_NOFIX")
+
for {
sc := bufio.NewScanner(reader)
for sc.Scan() {
log.Debugf("OVERWRITE %s -> %s", key, value)
}
}
+
+ // Send SIGINT to stop debugged process execution before sending -gdb-exit command
+ if !gdbExitNoFix && strings.Contains(command, "-gdb-exit") {
+ log.Infof("Detection of -gdb-exit, exiting...")
+ if err := gdb.SendSignal(syscall.SIGINT); err != nil {
+ log.Errorf("Error while sending signal SIGINT : %s", err.Error())
+ }
+ time.Sleep(time.Millisecond * 200)
+ }
+
gdb.Write(command + "\n")
log.Debugf("Send: <%v>", command)
}
go func() {
for {
sig := <-sigs
+
+ if isIgnoredSignal(sig) {
+ return
+ }
+
if err := gdb.SendSignal(sig); err != nil {
- log.Errorf("Error while sending signal: %s", err.Error())
+ log.Errorf("Error while sending signal %v : %s", sig, err.Error())
}
}
}()
path.Join(curDir, "target"),
path.Join(u.HomeDir, ".config", "xds"),
} {
- confFile = path.Join(d, xdsEnvFile)
- log.Infof("Search config in %s", confFile)
- if common.Exists(confFile) {
+ cf := path.Join(d, xdsEnvFile)
+ log.Infof("Search config in %s", cf)
+ if common.Exists(cf) {
+ confFile = cf
break
}
}