Tag: 调试

为什么fork()两次

Nagios让我配置child_processes_fork_twice= 。 文件说 此选项确定Nagios在执行主机和服务检查时是否会fork()子进程两次。 默认情况下,Nagios fork()两次。 但是,如果启用了use_large_installation_tweaks选项,则只会fork()一次。 据我所知, fork()将生成一个新的子进程。 我为什么要这样做两次?

内核模块上的addr2line

我正在尝试调试内核模块。 我怀疑有一些内存泄漏。 为了检查它,我准备了内核和模块的内存泄漏调试的构建。 我得到了一些警告: [11839.429168] slab error in verify_redzone_free(): cache `size-64′: memory outside object was overwritten [11839.438659] [] (unwind_backtrace+0x0/0x164) from [] (kfree+0x278/0x4d8) [11839.447357] [] (kfree+0x278/0x4d8) from [] (some_function+0x18/0x1c [my_module]) [11839.457214] [] (some_function+0x18/0x1c [my_module]) from [] (some_function+0x174/0x718 [my_module]) [11839.470184] [] (some_function+0x174/0x718 [my_module]) from [] (some_function+0x12c/0x16c [my_module]) [11839.483917] [] (some_function+0x12c/0x16c [my_module]) from [] (some_function+0x8/0x10 [my_module]) [11839.496368] [] […]

是否可以在GDB调试器中“跳转”/“跳过”?

在GDB中调试时是否可以跳转到代码/可执行文件中的某个位置/地址? 假设我有类似以下的内容 int main() { caller_f1() { f1(); // breakpoint f2() } // want to skip f2() and jump caller_f2() { // jump to this this location ?? f1(); f2(); } }

自动将进入/退出function日志添加到项目

我有第三方源代码,我必须调查。 我想知道调用函数的顺序,但我不想浪费时间输入: printf(“Entered into %s”, __FUNCTION__) 和 printf(“Exited from %s”, __FUNCTION__) 对于每个function,我也不想触摸任何源文件。 你有什么建议吗? 是否有一个编译器标志可以自动为我执行此操作? 澄清评论: 我将交叉编译源代码以在ARM上运行它。 我将用gcc编译它。 我不想分析静态代码。 我想跟踪运行时。 所以doxygen不会让我的生活更轻松。 我有源,我可以编译它。 我不想使用面向方面编程。 编辑:我发现gdb提示符中的’frame’命令在那个时间点打印当前帧(或者,你可以说是函数名)。 也许,每次调用函数时,都可以(使用gdb脚本)调用’frame’命令。 你怎么看?