我想使用eclipse IDE作为前端GUI来调试我的主机中另一个操作系统的操作系统的核心文件。使用' gdbserver'在docker我只能调试正在运行的进程。但我需要对核心文件进行事后调试。
我尝试了一些使用
的/ home / me / bin / remote_gdb包装器docker exec -it $DOCKER_CONTAINER bash -c "gdb /usr/bin/executable /opt/crash/executable.core
这适用于shell。但它没有在“日食”中使用。因为
Could not determine GDB version using command: remote_gdb --version
即使' remote_gdb --version'打印出来与原始版本完全相同' gdb --version'。
我可以使用' ddd'作为前端 - 让我锻炼:
> cd $HOME/SRC
> ls -l
total 4
-rw-rw-r-- 1 frank frank 96 Aug 24 18:04 test.c
> cat test.c
#include <stdio.h>
int main(int argc, char** argv)
{
printf("hello, world!\n");
return 0;
}
> docker run -v $HOME/SRC:/SRC -t fedora /bin/bash
// IN DOCKER NOW:
>> yum install gcc
[...]
>> yum install gdb
[...]
>> cd /SRC
>> gcc -g3 -O0 -o test test.c
>> ls -l
total 40
-rwxr-xr-x 1 root root 34864 Aug 24 16:26 test
-rw-rw-r-- 1 1000 1000 96 Aug 24 16:04 test.c
返回主持人:
> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e501d8384060 fedora "/bin/bash" 4 minutes ago Up 4 minutes stupefied_murdock
> cat $HOME/bin/remote_gdb
#!/bin/bash
docker exec -it e501d8384060 gdb /SRC/test
> remote_gdb # $HOME/bin/ is in $PATH
GNU gdb (GDB) Fedora 8.0-20.fc26
Copyright (C) 2017 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-redhat-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from /SRC/test...done.
(gdb) list
1 #include <stdio.h>
2
3 int main(int argc, char** argv)
4 {
5 printf("hello, world!\n");
6 return 0;
7 }
8
(gdb)
切换回shell,我在码头工具中 - 请参阅&#39; gdb&#39;正在运行:
>> yum install procps-ng
[...]
>> ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 16:22 ? 00:00:00 /bin/bash
root 16 0 0 16:23 ? 00:00:00 bash
root 116 0 0 16:28 ? 00:00:00 gdb /SRC/test
root 131 16 0 16:30 ? 00:00:00 ps -ef
再次返回主机shell(在docker中退出gdb会话后):
> ddd --debugger remote_gdb
&#39; ddd&#39;与在docker中启动的gdb很好地配合。 它也适用于核心文件(添加&#34;睡眠(100);&#34;并杀死进程)。 但是&#39; ddd&#39;没有一个非常好的GUI。 那么用“eclipse&#39;”进行这种工作的方式是什么? 我也无法使其与其他选项一起使用:&#39; qtcreator&#39;,&#39; kdevelop&#39;,&#39; nemiver&#39;&#39; kdbg&#39;,等
附录:
它也不适用于&#39; ssh&#39;进入容器。 但是当我执行相同的&#39; remote_gdb&#39;包装脚本作为&#39;外部工具&#39;它可以被执行(?!)
答案 0 :(得分:0)
我可以部分解决这个问题
主要问题是:我的docker命令没有提供日食的tty
作为一种解决方法,我切换到了ssh&#39;进入码头图像。
此外,我必须在主机和docker镜像之间对齐文件位置(可执行文件,核心文件和源文件)。因为使用&#39; gdb&#39;包装脚本,&#39; eclipse&#39;我不知道我正在远程调试并验证所有文件的本地可用性。
这适用于事后调试(核心文件分析)并在docker中附加正在运行的进程(通常在远程系统上)。
但是,不可以通过eclipse在gdb中启动进程。
如此习惯&#39; strace&#39;检查&#39; eclipse&#39;之间的活动。和&#39; gdb&#39;并且发现,为了在&#39; gdb&#39; eclipse&#39; eclipse&#39;中启动新流程试图应用一些&#39; - 解释器mi2 -nx&#39;命令:
inferior-tty-set --thread-group i1 / dev / pts / 27
是否意味着它尝试将本地tty绑定到gdb?
那当然不能远程工作。
使用&#34; inferior-tty-set&#34;是什么原因? by eclipse&#39;? 它没有使用此命令进行事后调试或附加正在运行的进程 - 而对于两者我甚至有一个gdb控制台可以操作&#39; eclipse&#39;