您只需要使用可执行文件调用gdb(无论是您的文件还是第三方文件都没有关系)。这是一个示例,其中我调试 ls 命令并在(共享) c库中
设置断点。此示例使用了gdb 6.8,它支持延迟(挂起)断点,这使此操作变得容易:
gdb /bin/lsGNU gdb 6.8-debianCopyright (C) 2008 Free Software Foundation, Inc.License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>This is free software: you are free to change and redistribute it.There is NO WARRANTY, to the extent permitted by law. Type "show copying"and "show warranty" for details.This GDB was configured as "x86_64-linux-gnu"...(no debugging symbols found)(gdb) b writeFunction "write" not defined.Make breakpoint pending on future shared library load? (y or [n]) yBreakpoint 1 (write) pending.(gdb) rStarting program: /bin/ls(no debugging symbols found)(no debugging symbols found)(no debugging symbols found)(no debugging symbols found)(no debugging symbols found)(no debugging symbols found)(no debugging symbols found)[Thread debugging using libthread_db enabled](no debugging symbols found)(no debugging symbols found)[New Thread 0x7f98d2d23780 (LWP 7029)][Switching to Thread 0x7f98d2d23780 (LWP 7029)]Breakpoint 1, 0x00007f98d2264bb0 in write () from /lib/libc.so.6(gdb)
如您所见,gdb自动管理可执行文件使用的所有线程。您不必为那里的线程做任何特殊的事情。断点将在任何线程中工作。
或者,如果要将调试器附加到已经运行的应用程序(我在此处以 tail -f / tmp / ttt 为例):
ps ux | grep taillothar 8496 0.0 0.0 9352 804 pts/3 S+ 12:38 0:00 tail -f /tmp/tttlothar 8510 0.0 0.0 5164 840 pts/4 S+ 12:39 0:00 grep tailgdbGNU gdb 6.8-debianCopyright (C) 2008 Free Software Foundation, Inc.License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>This is free software: you are free to change and redistribute it.There is NO WARRANTY, to the extent permitted by law. Type "show copying"and "show warranty" for details.This GDB was configured as "x86_64-linux-gnu"...(no debugging symbols found)(gdb) attach 8496Attaching to program: /usr/bin/tail, process 8496Reading symbols from /lib/librt.so.1...(no debugging symbols found)...done.Loaded symbols for /lib/librt.so.1Reading symbols from /lib/libc.so.6...(no debugging symbols found)...done.Loaded symbols for /lib/libc.so.6Reading symbols from /lib/libpthread.so.0...(no debugging symbols found)...done.[Thread debugging using libthread_db enabled][New Thread 0x7f24853f56e0 (LWP 8496)]Loaded symbols for /lib/libpthread.so.0Reading symbols from /lib/ld-linux-x86-64.so.2...(no debugging symbols found)...done.Loaded symbols for /lib64/ld-linux-x86-64.so.2(no debugging symbols found)0x00007f2484d2bb50 in nanosleep () from /lib/libc.so.6(gdb) b writeBreakpoint 1 at 0x7f2484d57bb0(gdb) cContinuing.[Switching to Thread 0x7f24853f56e0 (LWP 8496)]Breakpoint 1, 0x00007f2484d57bb0 in write () from /lib/libc.so.6(gdb)



