更新:找到了解决方法 - 在底部解释
我正在尝试通过串口远程调试我的程序。
在目标机器(arm,linux)上(通过串口连接到主机(Windows))我通过Putty连接并查找ttyS*
目录中的/dev
,但是我没有。我只有tty[num]
(没有S
),并且正在运行:
dmesg | grep tty
如建议here给出以下内容:
# dmesg | grep tty
Kernel command line: mxc_hdmi.only_cea=0 console=ttymxc1,115200 vmalloc=400M consoleblank=0 rootwait fixrtc root=/dev/mmcblk1p1
2020000.serial: ttymxc0 at MMIO 0x2020000 (irq = 58, base_baud = 5000000) is a IMX
21e8000.serial: ttymxc1 at MMIO 0x21e8000 (irq = 59, base_baud = 5000000) is a IMX
console [ttymxc1] enabled
所以我尝试使用ttymxc0
和ttymxc1
:
gdbserver /dev/ttymxc0 ./test/main
Process ./test/main created; pid = 253
Remote debugging using /dev/ttymxc0
并在主机上(Windows 7):(在评论后编辑)
gdb path/on/host/main
(gdb) target remote COM15
COM15: No such file or directory.
我看到here序列在 gdb 6.6 处被破解,但我有 gdb 7.7 。
为什么我收到没有这样的文件或目录错误?
编辑2:
虽然我尝试将端口重命名为 COM5 并且它没有帮助(相同的结果),但我将端口重命名为 COM2 并且它工作了一次然后它退出并停止工作:
(gdb) target remote COM2
Remote debugging using COM2
Ignoring packet error, continuing...
Malformed response to offset query, qOffsets //got out
(gdb) target remote COM2 //tried again, didn't work
COM2: No such file or directory.
COM2 与 COM15 之间的区别(除数字编号外)是 在Windows设备管理器中 COM2 显示为“已使用”,而 COM15 (和 COM5 )则未显示。当我选择 COM2 作为新名称时,Windows警告我它已被使用但我仍接受了更改。
现在我cleared all COM ports现在它正在交替工作(尚未成功实际调试,但它不会落在“没有这样的文件或目录”错误上。)
编辑3:
现在target remote COM2
响应“使用COM2进行远程调试,格式错误的响应......”当我不通过Putty连接到目标时。当我通过Putty连接时,它显示“COM2:没有这样的文件或目录”。这就像端口被(由Putty)占用而gdb无法登录。
我最终通过TCP连接而不是串行连接:
/etc/network/interfaces
以设置dhcp:auto eth0
iface eth0 inet dhcp
ifconfig
或ip addr
以获取IP gdbserver [ip:port] ./path/to/executable/on/target
gdb path/to/executable/on/host/compiled/to/target
(gdb) target remote [target's ip:port]
这对我来说是一个充分的解决方法。