当前位置:  技术问答>linux和unix

用GDB调试子进程

    来源: 互联网  发布时间:2016-10-07

    本文导语:  GDB调试在默认状态下是调试父进程的,用set follow-fork-mode child可以指定调试子进程 这个命令是不是在有些系统上没有实现啊? 怎么我在Cygwin输入这个命令之后还是在父进程? | Process Creation The fork call ...

GDB调试在默认状态下是调试父进程的,用set follow-fork-mode child可以指定调试子进程
这个命令是不是在有些系统上没有实现啊?
怎么我在Cygwin输入这个命令之后还是在父进程?

|
Process Creation
The fork call in Cygwin is particularly interesting because it does not map well on top of the Win32 API. This makes it very difficult to implement correctly. Currently, the Cygwin fork is a non-copy-on-write implementation similar to what was present in early flavors of UNIX.

The first thing that happens when a parent process forks a child process is that the parent initializes a space in the Cygwin process table for the child. It then creates a suspended child process using the Win32 CreateProcess call. Next, the parent process calls setjmp to save its own context and sets a pointer to this in a Cygwin shared memory area (shared among all Cygwin tasks). It then fills in the child's .data and .bss sections by copying from its own address space into the suspended child's address space. After the child's address space is initialized, the child is run while the parent waits on a mutex. The child discovers it has been forked and longjumps using the saved jump buffer. The child then sets the mutex the parent is waiting on and blocks on another mutex. This is the signal for the parent to copy its stack and heap into the child, after which it releases the mutex the child is waiting on and returns from the fork call. Finally, the child wakes from blocking on the last mutex, recreates any memory-mapped areas passed to it via the shared area, and returns from fork itself.

While we have some ideas as to how to speed up our fork implementation by reducing the number of context switches between the parent and child process, fork will almost certainly always be inefficient under Win32. Fortunately, in most circumstances the spawn family of calls provided by Cygwin can be substituted for a fork/exec pair with only a little effort. These calls map cleanly on top of the Win32 API. As a result, they are much more efficient. Changing the compiler's driver program to call spawn instead of fork was a trivial change and increased compilation speeds by twenty to thirty percent in our tests.

However, spawn and exec present their own set of difficulties. Because there is no way to do an actual exec under Win32, Cygwin has to invent its own Process IDs (PIDs). As a result, when a process performs multiple exec calls, there will be multiple Windows PIDs associated with a single Cygwin PID. In some cases, stubs of each of these Win32 processes may linger, waiting for their exec'd Cygwin process to exit.

===========

http://www.cygwin.com/ml/gdb/2001-02/msg00364.html

有可能不支持。

|
确实,我在很多平台上用的gdb都不是完全一样,基本的命令式一样的,有些和平台有关的命令就难说了

|
这样做:
1 在你的子进程代码中写一段无用程序,比如fake_func(),确保父进程不会执行这段程序,然后断点到这里。run...

|
可以用attach试试。。。

|
lz设置断点了么?在子进程里

http://www.ibm.com/developerworks/cn/linux/l-cn-gdbmp/index.html


|
你可以打开另一个gdb使用 attach

    
 
 

您可能感兴趣的文章:

  • 如何使用linux下gdb来调试python程序
  • gdb调试时命令行参数如何输入?比如main(int argc,char **argv)中,我要把一个filename作为argv[1]传入给gdb调试
  • 请问gdb是不是只能调试gcc编译的程序,在unix下用其它编译器编译的程序是不是不一定能用gdb调试的?
  • linux gdb: 我在一台机器上编译的程序用GDB可以调试,把程序放到另外一台机器上调试,调试信息就没有了 这是什么原因呢?
  • GDB调试 GDB挂了。。。
  • gdb 如何调试带命令行参数的程序 如 gdb a.out arg1,arg2
  • linux下用gdb调试程序感觉非常不方便,不知道大家使用的什么工具进行调试的呀?
  • 关于GDB无法调试segmentaton fault的问题,调试就死机
  • GDB调试问题,多共享库调试
  • gdb 怎么调试socket程序
  • 程序调试工具 GDB
  • 写调试器(像gdb)的一般思路是什么
  • gdb调试时的文件格式问题
  • gdb调试的问题,求高手。
  • gdb如何进行调试?
  • gdb调试动态链接库
  • 关于gdb调试资料---详细的
  • 哪位兄弟知道?gdb如何调试动态连接库
  • 在linux下除了gdb外还有没其他好用的调试器?
  • 在windows下编译和调试远程GDB BVRDE
  • gdb 调试
  • Linux下gdb如何追踪进入子进程??急急7777777777777
  • Linux下gdb如何追踪进入子进程??-----〉有没有类似dbx的追踪功能
  • 请问gdb怎么处理带有启动参数的程序和多进程程序?
  • 大虾,怎么用gdb调试多进程程序啊?
  • 请教用gdb调试多进程程序的问题
  • gdb 调试运行进程 堆栈中的函数名为问号
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 使用gcc gdb的大牛进来说说gdb的强大之处在哪。我刚学linux了,vim我确实体会到了其强大之处。而对gcc gdb,体会不到gdb这工具的强大之处。
  • 请教 make gdb-6.4 出现 make[4]: Entering directory `/tmp/gdb-6.4/gdb/doc'
  • gdb 使用问题请教
  • gdb的问题,请教,会者不难,快来拿分
  • 在rh9上无法使用gdb是怎么回事呢
  • gdb高手请指教
  • 请问,有人研究过gdb-insight源码吗?
  • gdb调试
  • 如何编译gdb
  • 怎样在windows中编译生成gdb
  • gdb升级的问题
  • 如何阅读GDB源代码?
  • 我的gdb为什么不能设置logging?
  • 使用GDB调试程序,如何正确的向程序传递参数.
  • 用gdb调试时如何将命令行参数传入?
  • 找高手:gdb脚本传递参数问题
  • 使用gdb 时, command not found , linux里不是应该有这个工具吗?
  • gdb的时候代码 next显示的代码乱了
  • gdb下用shell写环境变量的问题
  • gdb是放在Red Hat Linux 9.0的什么位置?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3