2.2 GDB调试一个已经存在的程序即gdb attach原理 我们用gdb attach PID的时候,ptrace第一个参数传入的就是PTRACE_ATTACH,这是父进程调用 attach 到已经运行的子进程中;这个命令会有权限的检查, 普通用户进程不能 attach 到 root 进程中,但一般调试的都是普通用户进程,所以也没遇到过问题。 这个过程就是:运行一个...
在Linux上,执行有多线程的程序时,当程序执行退出操作时有时会遇到卡死现象,如果程序模块多,代码量大,很难快速定位,此时可试试gdb attach方法。测试代码main.cpp如下,这里为了使程序退出时产生卡死现象,在第51行时push线程sleep 100分钟:#include <stdio.h> #include <thread> ...
不久前, 我们玩过valgrind定位程序的各类内存问题, 当时非常希望valgrind能对一个已经存在的进程进行attach在线调试, 后来看了valgrind的原理, 发现这样不可行。 只能让valgrind重新拉取新进程进行调试。 在前面的文章中, 也介绍了kill -6和abort函数, 让程序core dump来获取当时栈的值, 其实, 这样似乎没有必要。
attach <进程ID> 其中,<进程ID>是要调试的目标进程的进程ID。使用attach命令进行进程调试的一般步骤: (1)首先,启动目标进程,确保它正在运行。使用top命令找到进程的ID。 top -u <用户名> (2)输入以下命令以启动gdb调试器: gdb (3)在gdb提示符下,使用attach命令附加到目标进程。假设目标进程的进程ID是1234...
GDB在调试多进程程序(程序含fork调用)时,默认只追踪父进程。可以通过命令设置,实现只追踪父进程或子进程,或者同时调试父进程和子进程。 命令 作用 info inferiors 查看进程列表 attach pid 绑定进程id inferior num 切换到指定进程上进行调试 print $_exitcode 显示程序退出时的返回值 set follow-fork-mode child ...
gdb <program> 启动程序进行调试 gdb ./bin/chat_server gdb --args ./bin/chat_server -c conf/cache_server.conf 在 UNIX 下用 ps 查看正在运行的程序的 PID (进程 ID), 然后用 gdb <program> PID 格式挂接正在运行的程序。 gdb attach <pid> 调试一个已经运行服务程序 gdb ./bin/chat_server $(...
gdb调试正在运行的进程: GDB可以对正在执行的程序进行调度,它允许开发人员中断程序 并查看其状态,之后还能让这个程序正常地继续执行 (gdb) attach xxxxx --- xxxxx为利用ps命令获得的子进程process id (gdb) stop --- 这点很重要,你需要先暂停那个子进程,然后设置一些断点和一些Watch ...
(gdb) gdb -p 进程名 //对指定进程进行调试 (gdb) gdb attach 进程名 1. 2. 3.2 调试线程 (gdb) info thread //调试已运行的进程下再列出线程 (gdb) thread 线程号 //切换至线程 1. 2. 3.3 查看相关信息 (gdb) info thread //列出线程 ...
1.2 执行中进程调试 如果想对一个已经执行的进程进行调试,那么就要在gdb这个父进程中调用ptrace(PTRACE_ATTACH,[其他参数]),此时,gdb进程会attach(绑定)到已经执行的进程B,gdb把进程B收养成为自己的子进程,而子进程B的行为等同于它进行了一次 PTRACE_TRACEME操作。