使用eclipse进行远程核心文件分析

时间:2017-08-24 07:19:17

标签: c++ eclipse gdb

我想使用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;它可以被执行(?!)

1 个答案:

答案 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;