Delphi Linux 中的 RIO PAServer 引发 IOError 11
Delphi RIO PAServer in Linux raises IOError 11
我有一个奇怪的问题我自己解决不了:
在 Linux 上使用 Delphi 10.3 Rio Enterprise(我尝试全新安装 Ubuntu 16.04 和 Ubuntu 18.04 Desktop 和 Ubuntu 18.04 Server with GUI in VMWare Player 15) PAServer crashes with I/O Error 11 每次开始调试。我可以拉取 SDK,并且 Delphi 可以正确部署所有文件。但是尝试 运行 以崩溃和 Delphi 抱怨 GDB 服务器不再可用而告终。我可以通过手动启动 运行 Linux 主机上的程序(当然无需调试)。
它不依赖于 Linux 中的用户,它也以 root 身份发生。此外,即使在非 GUI Ubuntu 服务器上,非图形应用程序也会崩溃,始终出现 IO 错误 11。
使用 PAServer 进行调试在 OSX、Android 和 Windows 上运行良好。我当然尝试了一个非常简单的单一形式项目,没有内容但结果相同。
我用 ProcMon 追踪了 Delphi PAClient,没有这方面的证据。然后我用 strace 跟踪了 Linux 进程,它给了我这个输出:
write(1, "Starting Platform Assistant Serv"..., 49Starting Platform Assistant Server on port 64211
) = 49
write(1, "\n", 1
) = 1
write(1, "Type ? for available commands\n", 30Type ? for available commands
) = 30
socket(PF_INET6, SOCK_STREAM, IPPROTO_IP) = 5
close(5) = 0
socket(PF_INET, SOCK_STREAM, IPPROTO_IP) = 5
getsockopt(5, SOL_SOCKET, SO_TYPE, [1], [4]) = 0
getsockopt(5, SOL_TCP, TCP_NODELAY, [0], [4]) = 0
setsockopt(5, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
setsockopt(5, SOL_SOCKET, SO_REUSEPORT, [1], 4) = 0
bind(5, {sa_family=AF_INET, sin_port=htons(64211), sin_addr=inet_addr("0.0.0.0")}, 16) = 0
getsockname(5, {sa_family=AF_INET, sin_port=htons(64211), sin_addr=inet_addr("0.0.0.0")}, [16]) = 0
setsockopt(5, SOL_TCP, TCP_NODELAY, [1], 4) = 0
socket(PF_INET6, SOCK_STREAM, IPPROTO_IP) = 6
getsockopt(6, SOL_SOCKET, SO_TYPE, [1], [4]) = 0
getsockopt(6, SOL_TCP, TCP_NODELAY, [0], [4]) = 0
setsockopt(6, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
setsockopt(6, SOL_SOCKET, SO_REUSEPORT, [1], 4) = 0
bind(6, {sa_family=AF_INET6, sin6_port=htons(64211), inet_pton(AF_INET6, "::", &sin6_addr), sin6_flowinfo=0, sin6_scope_id=0}, 28) = 0
getsockname(6, {sa_family=AF_INET6, sin6_port=htons(64211), inet_pton(AF_INET6, "::", &sin6_addr), sin6_flowinfo=0, sin6_scope_id=0}, [28]) = 0
setsockopt(6, SOL_TCP, TCP_NODELAY, [1], 4) = 0
listen(5, 15) = 0
mmap(NULL, 8392704, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANONYMOUS|MAP_STACK, -1, 0) = 0x7f8ab39f9000
mprotect(0x7f8ab39f9000, 4096, PROT_NONE) = 0
clone(child_stack=0x7f8ab41f8ff0, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID, parent_tidptr=0x7f8ab41f99d0, tls=0x7f8ab41f9700, child_tidptr=0x7f8ab41f99d0) = 28987
sched_getparam(28987, [0]) = 0
sched_getscheduler(28987) = 0 (SCHED_OTHER)
listen(6, 15) = 0
mmap(NULL, 8392704, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANONYMOUS|MAP_STACK, -1, 0) = 0x7f8ab31f8000
mprotect(0x7f8ab31f8000, 4096, PROT_NONE) = 0
clone(child_stack=0x7f8ab39f7ff0, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID, parent_tidptr=0x7f8ab39f89d0, tls=0x7f8ab39f8700, child_tidptr=0x7f8ab39f89d0) = 28988
sched_getparam(28988, [0]) = 0
sched_getscheduler(28988) = 0 (SCHED_OTHER)
brk(0x1f55000) = 0x1f55000
brk(0x1f76000) = 0x1f76000
brk(0x1f97000) = 0x1f97000
brk(0x1fba000) = 0x1fba000
brk(0x1fdb000) = 0x1fdb000
mmap(NULL, 200704, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f8ab82b8000
mmap(NULL, 200704, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f8ab8287000
write(1, ">", 1>) = 1
read(0, 0xe0bf90, 128) = -1 EAGAIN (Resource temporarily unavailable)
read(0, 0xe0bf90, 128) = -1 EAGAIN (Resource temporarily unavailable)
shutdown(5, SHUT_WR) = 0
close(5) = 0
select(4, [3], NULL, NULL, {1, 0}) = 1 (in [3], left {0, 999997})
ioctl(3, FIONREAD, [1]) = 0
read(3, "[=12=]", 1) = 1
select(4, [3], NULL, NULL, {1, 0}) = 1 (in [3], left {0, 817727})
ioctl(3, FIONREAD, [1]) = 0
read(3, "[=12=]", 1) = 1
select(4, [3], NULL, NULL, {1, 0}) = 1 (in [3], left {0, 999997})
ioctl(3, FIONREAD, [1]) = 0
read(3, "[=12=]", 1) = 1
shutdown(6, SHUT_WR) = 0
close(6) = 0
select(4, [3], NULL, NULL, {1, 0}) = 1 (in [3], left {0, 974854})
ioctl(3, FIONREAD, [1]) = 0
read(3, "[=12=]", 1) = 1
shutdown(7, SHUT_WR) = 0
close(7) = 0
shutdown(8, SHUT_WR) = 0
close(8) = 0
select(0, NULL, NULL, NULL, {0, 500000}) = 0 (Timeout)
write(1, "EInOutError: I/O error 11\n", 26EInOutError: I/O error 11
) = 26
在此先感谢您的帮助!
完全修改答案。
它似乎与 vmWare Player 15 无关,但以某种方式与 Ubuntu、16 和 18 相关。在所有非 Linux OS 调试工作中,也在Rhedhat 7 和 Debian Stretch。
在 Debian 9 中,我不得不使用 Ubuntu 机器生成的 sdk,因为在 Debian 中生成时缺少一些文件。可能很容易解决,但其他 SDK 可以完成它的工作。
请检查
https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1813873
Ubuntu 内核 4.15.0-44 引入了这个问题,Ubuntu 将在 3 月 4 日的下一次内核更新中解决这个问题。
我有一个奇怪的问题我自己解决不了:
在 Linux 上使用 Delphi 10.3 Rio Enterprise(我尝试全新安装 Ubuntu 16.04 和 Ubuntu 18.04 Desktop 和 Ubuntu 18.04 Server with GUI in VMWare Player 15) PAServer crashes with I/O Error 11 每次开始调试。我可以拉取 SDK,并且 Delphi 可以正确部署所有文件。但是尝试 运行 以崩溃和 Delphi 抱怨 GDB 服务器不再可用而告终。我可以通过手动启动 运行 Linux 主机上的程序(当然无需调试)。
它不依赖于 Linux 中的用户,它也以 root 身份发生。此外,即使在非 GUI Ubuntu 服务器上,非图形应用程序也会崩溃,始终出现 IO 错误 11。
使用 PAServer 进行调试在 OSX、Android 和 Windows 上运行良好。我当然尝试了一个非常简单的单一形式项目,没有内容但结果相同。
我用 ProcMon 追踪了 Delphi PAClient,没有这方面的证据。然后我用 strace 跟踪了 Linux 进程,它给了我这个输出:
write(1, "Starting Platform Assistant Serv"..., 49Starting Platform Assistant Server on port 64211
) = 49
write(1, "\n", 1
) = 1
write(1, "Type ? for available commands\n", 30Type ? for available commands
) = 30
socket(PF_INET6, SOCK_STREAM, IPPROTO_IP) = 5
close(5) = 0
socket(PF_INET, SOCK_STREAM, IPPROTO_IP) = 5
getsockopt(5, SOL_SOCKET, SO_TYPE, [1], [4]) = 0
getsockopt(5, SOL_TCP, TCP_NODELAY, [0], [4]) = 0
setsockopt(5, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
setsockopt(5, SOL_SOCKET, SO_REUSEPORT, [1], 4) = 0
bind(5, {sa_family=AF_INET, sin_port=htons(64211), sin_addr=inet_addr("0.0.0.0")}, 16) = 0
getsockname(5, {sa_family=AF_INET, sin_port=htons(64211), sin_addr=inet_addr("0.0.0.0")}, [16]) = 0
setsockopt(5, SOL_TCP, TCP_NODELAY, [1], 4) = 0
socket(PF_INET6, SOCK_STREAM, IPPROTO_IP) = 6
getsockopt(6, SOL_SOCKET, SO_TYPE, [1], [4]) = 0
getsockopt(6, SOL_TCP, TCP_NODELAY, [0], [4]) = 0
setsockopt(6, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
setsockopt(6, SOL_SOCKET, SO_REUSEPORT, [1], 4) = 0
bind(6, {sa_family=AF_INET6, sin6_port=htons(64211), inet_pton(AF_INET6, "::", &sin6_addr), sin6_flowinfo=0, sin6_scope_id=0}, 28) = 0
getsockname(6, {sa_family=AF_INET6, sin6_port=htons(64211), inet_pton(AF_INET6, "::", &sin6_addr), sin6_flowinfo=0, sin6_scope_id=0}, [28]) = 0
setsockopt(6, SOL_TCP, TCP_NODELAY, [1], 4) = 0
listen(5, 15) = 0
mmap(NULL, 8392704, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANONYMOUS|MAP_STACK, -1, 0) = 0x7f8ab39f9000
mprotect(0x7f8ab39f9000, 4096, PROT_NONE) = 0
clone(child_stack=0x7f8ab41f8ff0, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID, parent_tidptr=0x7f8ab41f99d0, tls=0x7f8ab41f9700, child_tidptr=0x7f8ab41f99d0) = 28987
sched_getparam(28987, [0]) = 0
sched_getscheduler(28987) = 0 (SCHED_OTHER)
listen(6, 15) = 0
mmap(NULL, 8392704, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANONYMOUS|MAP_STACK, -1, 0) = 0x7f8ab31f8000
mprotect(0x7f8ab31f8000, 4096, PROT_NONE) = 0
clone(child_stack=0x7f8ab39f7ff0, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID, parent_tidptr=0x7f8ab39f89d0, tls=0x7f8ab39f8700, child_tidptr=0x7f8ab39f89d0) = 28988
sched_getparam(28988, [0]) = 0
sched_getscheduler(28988) = 0 (SCHED_OTHER)
brk(0x1f55000) = 0x1f55000
brk(0x1f76000) = 0x1f76000
brk(0x1f97000) = 0x1f97000
brk(0x1fba000) = 0x1fba000
brk(0x1fdb000) = 0x1fdb000
mmap(NULL, 200704, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f8ab82b8000
mmap(NULL, 200704, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f8ab8287000
write(1, ">", 1>) = 1
read(0, 0xe0bf90, 128) = -1 EAGAIN (Resource temporarily unavailable)
read(0, 0xe0bf90, 128) = -1 EAGAIN (Resource temporarily unavailable)
shutdown(5, SHUT_WR) = 0
close(5) = 0
select(4, [3], NULL, NULL, {1, 0}) = 1 (in [3], left {0, 999997})
ioctl(3, FIONREAD, [1]) = 0
read(3, "[=12=]", 1) = 1
select(4, [3], NULL, NULL, {1, 0}) = 1 (in [3], left {0, 817727})
ioctl(3, FIONREAD, [1]) = 0
read(3, "[=12=]", 1) = 1
select(4, [3], NULL, NULL, {1, 0}) = 1 (in [3], left {0, 999997})
ioctl(3, FIONREAD, [1]) = 0
read(3, "[=12=]", 1) = 1
shutdown(6, SHUT_WR) = 0
close(6) = 0
select(4, [3], NULL, NULL, {1, 0}) = 1 (in [3], left {0, 974854})
ioctl(3, FIONREAD, [1]) = 0
read(3, "[=12=]", 1) = 1
shutdown(7, SHUT_WR) = 0
close(7) = 0
shutdown(8, SHUT_WR) = 0
close(8) = 0
select(0, NULL, NULL, NULL, {0, 500000}) = 0 (Timeout)
write(1, "EInOutError: I/O error 11\n", 26EInOutError: I/O error 11
) = 26
在此先感谢您的帮助!
完全修改答案。
它似乎与 vmWare Player 15 无关,但以某种方式与 Ubuntu、16 和 18 相关。在所有非 Linux OS 调试工作中,也在Rhedhat 7 和 Debian Stretch。
在 Debian 9 中,我不得不使用 Ubuntu 机器生成的 sdk,因为在 Debian 中生成时缺少一些文件。可能很容易解决,但其他 SDK 可以完成它的工作。
请检查 https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1813873
Ubuntu 内核 4.15.0-44 引入了这个问题,Ubuntu 将在 3 月 4 日的下一次内核更新中解决这个问题。