为了更有效地使用NDB来附加并调试进程,以下是一步一步的详细指导。这个过程包括编译带有调试信息的程序、运行程序、找到进程ID、附加到进程、继续执行以及查看堆栈信息等步骤。仅供参考
1、编译带有调试信息的程序
首先,你需要有一个带有调试信息的程序。以下是一个代码示例:
//example.c
- #include <stdio.h>
#include <unistd.h>
int main() {
for (int i = 0; i < 1000; ++i) {printf("HELLO %d\n", i); sleep(1); } return 0; }
2、编译并运行这个程序
命令:g++ -g -o gendb example.c
命令:./gendb
输出:
HELLO 0
HELLO 1
HELLO 2
…3、使用NDB附加到进程
回到你的第一个终端窗口(或者你打开的任何一个新的终端窗口),使用ps命令找到你的程序的进程ID(PID):命令:ps aux | grep gendb
输出:
geduer 3084 0.0 0.0 28176 12760 pts/1 Tsl+ 09:51 0:00 vim /home/geduer/gendb/example.c
geduer 3890 0.0 0.0 2252 740 pts/3 S+ 10:14 0:00 ./gendb
geduer 3988 0.0 0.0 9232 2028 pts/4 S+ 10:14 0:00 grep –color=auto gendb输出将包含你的程序的行,其中包含了进程ID。记录下这个PID。
然后,使用NDB的-p选项附加到这个进程:命令:ps aux|grep gendb
ndb -p 3890(将
输出:(节选)替换为你找到的进程ID)
datapath is /opt/gedu/nanocode/data/DbgCmds.xml
Cannot open file .
Connecting (0x0), please wait…
0807101418E#4156:set PTRACE_SETOPTIONS 0x48 for pid 3890 ret 0, errno 17
0807101418E#4156:scan region /home/geduer/gendb/gendb, perms: 0x15, type: 0x3 type 0x3
0807101418E#4156:got module /home/geduer/gendb/gendb
0807101418E#4156:scan region /home/geduer/gendb/gendb, perms: 0x11, type: 0x1 type 0x1
0807101418E#4156:scan region /home/geduer/gendb/gendb, perms: 0x13, type: 0x1 type 0x1
skip module [heap]4、在NDB中继续执行
详情可参考上一篇使用ndb从头调试一个应用程序5、查看堆栈信息
在调试过程中,查看当前堆栈信息是非常有用的。在NDB中,你可以使用k命令(或者NDB可能使用的其他命令,具体取决于其实现)来打印堆栈跟踪:命令:k
输出:
echo: ‘k’
0807101518E#4156:readv in 3890, @0x83e0607e70 L8, got 0
0807101518E#4156:readv in 3890, @0x82e0607e78 L8, got 0
k
Child-SP RetAddr Call Site
0000007fe0607dc8 0000007f
894d61fc libc!clock_nanosleep+0x7c [../sysdeps/unix/sysv/linux/clock_nanosleep.c @ 4430]
0000007fe0607e18 0000007f
894e61ec libc!nanosleep+0x1c [../sysdeps/unix/sysv/linux/nanosleep.c @ 2330]
0000007fe0607e48 00000055
8c9c07fc libc!__sleep+0x4c [../sysdeps/posix/sleep.c @ 4407]
0000007fe0607e88 00000082
e0607e78 gendb!main+0x28 [/home/geduer/gendb/example.c @ 1541]6、退出ndb
完成调试后,你可以退出NDB命令:q
输出:
echo: ‘q’
q
quit:
NDB quits, bye.
命令退出NDB并返回到你的终端
以上内容仅供参考,大家可以一起动手操作
作者:涂滨晶 创建时间:2024-08-06 13:22
最后编辑:涂滨晶 更新时间:2024-08-07 16:18
最后编辑:涂滨晶 更新时间:2024-08-07 16:18