使用微软的 ProcDump 调试 Linux 进程


使用微软的 ProcDump 调试 Linux 进程

文章插图
 
用这个微软的开源工具,获取进程信息 。
• 来源:linux.cn • 作者:Gaurav Kamathe • 译者:Xingyu.Wang •
(本文字数:12941,阅读时长大约:14 分钟)
微软越来越心仪 Linux 和开源,这并不是什么秘密 。在过去几年中,该公司稳步地增加了对开源的贡献,包括将其部分软件和工具移植到 Linux 。2018 年底,微软 宣布 将其 Sysinternals 的部分工具以开源的方式移植到 Linux,Linux 版的 ProcDump 是其中的第一个 。
如果你在 windows 上从事过调试或故障排除工作,你可能听说过 Sysinternals,它是一个“瑞士军刀”工具集,可以帮助系统管理员、开发人员和 IT 安全专家监控和排除 Windows 环境的故障 。
Sysinternals 最受欢迎的工具之一是 ProcDump。顾名思义,它用于将正在运行的进程的内存转储到磁盘上的一个核心文件中 。然后可以用调试器对这个核心文件进行分析,了解转储时进程的状态 。因为之前用过 Sysinternals,所以我很想试试 ProcDump 的 Linux 移植版 。
开始使用 Linux 上的 ProcDump要试用 Linux 上的 ProcDump,你需要下载该工具并编译它 。(我使用的是 Red Hat Enterprise Linux,尽管这些步骤在其他 Linux 发行版上应该是一样的):
$ cat /etc/redhat-releaseRed Hat Enterprise Linux release 8.2 (Ootpa)$$ uname -r4.18.0-193.el8.x86_64$首先,克隆 Linux 版 ProcDump 的版本库 。
$ git clone https://github.com/microsoft/ProcDump-for-Linux.gitCloning into 'ProcDump-for-Linux'...remote: Enumerating objects: 40, done.remote: Counting objects: 100% (40/40), done.remote: Compressing objects: 100% (33/33), done.remote: Total 414 (delta 14), reused 14 (delta 6), pack-reused 374Receiving objects: 100% (414/414), 335.28 KiB | 265.00 KiB/s, done.Resolving deltas: 100% (232/232), done.$$ cd ProcDump-for-Linux/$$ lsazure-pipelines.yml  CONTRIBUTING.md  docs     INSTALL.md  Makefile    procdump.gif  srcCODE_OF_CONDUCT.md   dist             include  LICENSE     procdump.1  README.md     tests$接下来,使用 make 构建程序 。它能准确地输出编译源文件所需的 GCC 命令行参数 。
【使用微软的 ProcDump 调试 Linux 进程】$ makerm -rf objrm -rf binrm -rf /root/ProcDump-for-Linux/pkgbuildgcc -c -g -o obj/Logging.o src/Logging.c -Wall -I ./include -pthread -std=gnu99gcc -c -g -o obj/Events.o src/Events.c -Wall -I ./include -pthread -std=gnu99gcc -c -g -o obj/ProcDumpConfiguration.o src/ProcDumpConfiguration.c -Wall -I ./include -pthread -std=gnu99gcc -c -g -o obj/Handle.o src/Handle.c -Wall -I ./include -pthread -std=gnu99gcc -c -g -o obj/Process.o src/Process.c -Wall -I ./include -pthread -std=gnu99gcc -c -g -o obj/Procdump.o src/Procdump.c -Wall -I ./include -pthread -std=gnu99gcc -c -g -o obj/TriggerThreadProcs.o src/TriggerThreadProcs.c -Wall -I ./include -pthread -std=gnu99gcc -c -g -o obj/CoreDumpWriter.o src/CoreDumpWriter.c -Wall -I ./include -pthread -std=gnu99gcc -o bin/procdump obj/Logging.o obj/Events.o obj/ProcDumpConfiguration.o obj/Handle.o obj/Process.o obj/Procdump.o obj/TriggerThreadProcs.o obj/CoreDumpWriter.o -Wall -I ./include -pthread -std=gnu99gcc -c -g -o obj/ProcDumpTestApplication.o tests/integration/ProcDumpTestApplication.c -Wall -I ./include -pthread -std=gnu99gcc -o bin/ProcDumpTestApplication obj/ProcDumpTestApplication.o -Wall -I ./include -pthread -std=gnu99$编译过程中会创建两个新的目录 。第一个是 obj/ 目录,存放编译期间创建的对象文件 。第二个(也是更重要的)目录是 bin/,它是存储编译出的 procdump 程序的地方 。它还会编译另一个名为 ProcDumpTestApplication 的测试二进制文件:
$ ls obj/CoreDumpWriter.o  Handle.o   ProcDumpConfiguration.o  ProcDumpTestApplication.o  TriggerThreadProcs.oEvents.o          Logging.o  Procdump.o               Process.o$$$ ls bin/procdump  ProcDumpTestApplication$$ file bin/procdumpbin/procdump: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=6e8827db64835ea0d1f0941ac3ecff9ee8c06e6b, with debug_info, not stripped$$ file bin/ProcDumpTestApplicationbin/ProcDumpTestApplication: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=c8fd86f53c07df142e52518815b2573d1c690e4e, with debug_info, not stripped$在此情况下,每次运行 procdump 实用程序时,你都必须移动到 bin/ 文件夹中 。要使它在系统中的任何地方都可以使用,运行 make install 。这将这个二进制文件复制到通常的 bin/ 目录中,它是你的 shell $PATH 的一部分:


推荐阅读