511 日 , 2024 22:25:53
fork 函数在gdb调试时造成的困扰

在使用 GDB(GNU 调试器)调试程序时,fork() 可能会引起一些困扰,主要是因为 fork() 创建了新的子进程,而 GDB 默认只会跟踪一个进程。这可能会导致以下问题:

  1. 调试子进程: 默认情况下,GDB 会在调试器中继续跟踪父进程,而不是新创建的子进程。这就意味着如果想要调试子进程,需要手动在 GDB 中切换到子进程。可以使用 set follow-fork-mode 命令来控制 GDB 如何处理 fork() 调用,比如可以设置 set follow-fork-mode child 让 GDB 在 fork() 调用时跟踪子进程。
  2. 断点和状态同步: 当父进程调用 fork() 创建子进程时,GDB 的断点和状态可能会出现不同步的情况。比如,在子进程中可能会存在父进程设置的断点,而这些断点在默认情况下可能不会自动同步到子进程中。需要手动设置断点或者在子进程中执行 exec 命令来重新加载程序。
  3. 进程管理: 如果程序中有多次 fork() 调用,可能会涉及到多个子进程,而 GDB 默认只会跟踪一个进程。这就需要开发者手动切换到不同的进程进行调试。

总的来说,fork() 在 GDB 中的困扰主要是与进程管理、断点同步以及调试模式切换相关的问题

使用gdb调试的时候,gdb只能跟踪一个进程。可以在fork函数调用之前,通过指令设置gdb调试工具跟踪父进程或子进程。默认情况下gdb是跟踪父进程的。

show follow-fork-mode : 查看目前的跟踪模式。
set follow-fork-mode child : 命令设置gdb在fork之后跟踪子进程。
set follow-fork-mode parent : 设置跟踪父进程。
show detach-on-fork : 显示了目前是的detach-on-fork模式
set detach-on-fork on : 只调试父进程或子进程的其中一个(根据follow-fork-mode来决定),这是默认的模式。
set detach-on-fork off : 父子进程都在gdb的控制之下,其中一个进程正常调试(根据follow-fork-mode来决定),另一个进程会被设置为暂停状态。

 

 (gdb) set follow-fork-mode child
(gdb) set detach-on-fork off
(gdb) info functions

 

 

 

暂无评论

发送评论 编辑评论

|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!