gdbserver:执行目标的shell命令

gdbserver:执行目标的shell命令,shell,gdb,remote-debugging,gdbserver,Shell,Gdb,Remote Debugging,Gdbserver,例如,!ls将在gdb本身中执行ls命令,但如何在远程端执行呢 应该很简单,但我想不出来。类似于target remote | ls或target remote |!ls应该能做到这一点,但要么它错了,要么我不明白:这样的命令使gdb试图关闭当前会话,并开始调试ls二进制文件 我还发现了一些提到的monitor cmd,但是monitor!ls仅触发未知监视器命令消息 ! ls > /tmp/ls.txt 使用尝试执行的所有命令!cmd将起作用,但您无法获得输出,因为gdbserver无

例如,
!ls
将在gdb本身中执行ls命令,但如何在远程端执行呢

应该很简单,但我想不出来。类似于
target remote | ls
target remote |!ls
应该能做到这一点,但要么它错了,要么我不明白:这样的命令使gdb试图关闭当前会话,并开始调试ls二进制文件

我还发现了一些提到的
monitor cmd
,但是
monitor!ls
仅触发
未知监视器命令
消息

! ls > /tmp/ls.txt
使用
尝试执行的所有命令!cmd将起作用,但您无法获得输出,因为gdbserver无法正确重定向流。

只需打开一个新的远程连接,即可看到gdb remote命令的输出重定向到一个类似前面示例的文件。

目标远程|命令
用于在本地运行
命令
,该
命令
通常是在其他地方运行的gdbserver的自定义编写代理。您想让远程gdbserver作为要调试的目标进程运行
ls
,还是想运行
ls
并查看其输出而不影响远程目标?@MarkPlotnick是的,我只想运行
ls
并查看输出,而不影响正在调试的进程。同样,正如我刚才所理解的,输出很可能会进入运行«gdbserver»的shell,而不是连接到的gdb。对我来说,这没关系。我看到远程调试协议包括,作为远程文件I/o请求之一,在远程shell中运行任意命令的请求(请参阅),但我不知道如何立即告诉gdb发出该请求。我只是测试了一下,这并没有在远程端执行该命令。我做的步骤:1。在/tmp/dir中运行
gdbserver:2345 ls
2。在$HOME dir中运行
gdb
,并在其中评估
目标扩展远程本地主机:2345
。3.在gdb中计算
!ls
。它显示主页的内容,但不显示/tmp。4.在gdb中计算
!ls>1
这将在$HOME中创建一个文件
1
,但不在/tmp中,并且
1
文件的内容是$HOME中的文件列表。