调试多任务与Linux移植指南
1. 调试多任务
在处理多线程执行时,开发者通常会遇到两种不同的调试场景。进程可以拥有自己独立的地址空间,也可以与其他执行线程共享地址空间(以及其他系统资源)。对于不共享公共地址空间的独立进程,必须使用单独的独立调试会话进行调试。你可以在目标系统的多个进程上使用gdbserver,并在开发主机上分别调用GDB,以协调多个协作但独立的进程的调试会话。
1.1 调试多个进程
当在GDB下调试的进程使用 fork()
系统调用创建新进程时,GDB有两种操作方式。它可以继续控制和调试父进程,也可以停止调试父进程并附加到新创建的子进程。你可以使用 set follow-fork-mode
命令来控制这种行为,该命令有两种模式: follow parent
和 follow child
,默认情况下GDB会跟随父进程。在这种情况下,子进程在 fork()
成功后立即执行。
以下是一个简单的程序片段,它从 main()
例程中创建多个进程:
for( i=0; i<MAX_PROCESSES; i++ ) {
/* Creating child process */
pid[i] = fork(); /* Parent gets non-zero PID */
if ( pid[i] == -1 ) {
perror