lint¹ïLinux¦Ó¨¥¨Ã¨S¦³«Ü¼sªxªº¥Î³~¡A¥Dn¬O¦]¬°¤j³¡¥÷ªº¤H³£¯àº¡¨¬©ógcc©Ò´£¨ÑªºÄµ§i°T®§¡C¥i¯à³Ì¦³¥Îªº´N¬O-Wall
°Ñ¼Æ¤F---³oӰѼƪº¥Î³~¬On¨Dgcc±N©Ò¦³ªºÄµ§i°T®§Åã²{¥X¨Ó¡Fbut probably has more mnemonic value if thought of as the thing you bang your head against.
ºô¸ô¤W¦³¤@Ó¹ê¥Îªºpublic domain lint¡A¦ì©ó ftp://larch.lcs.mit.edu/pub/Larch/lclint¡C§Ú¨Ã¤£ª¾¹D³oÓ¯¸¨ì©³¦³¦h¦n´N¬O¤F¡C
§A»Ýn²K¥[-g
ªº°Ñ¼Æ¨Ó½sĶ»P³sµ²µ{¦¡¡A¦Ó¥B¤£¥i¥H¥Î-fomit-frame-pointer
°Ñ¼Æ¡C¨Æ¹ê¤W¡A§A¤£»Ýn«·s½sĶ©Ò¦³ªºµ{¦¡¡A¥u»Ý«·s½sĶ¥Ø«e§A¥¿¦b°£¿ùªº³¡¥÷§Y¥i¡C
´Na.outªº²ÕºA¦Ó¨¥¡A¦@¨Éµ{¦¡®w¬O¥H-fomit-frame-pointer
½sͦӦ¨¡A³oÓ®ÉÔ¡Agdb´NÅܱo^¶¯µL¥ÎªZ¤§¦a¤F¡C³sµ²®Éµ¹©w-g
ªº¿ï¶µ¡AÀ³¸Ó´NÁô§tµÛÀRºA³sµ²ªº·N¸q¤F¡F³o´N¬O¬°¤°»òn¥[-gªºì¦]¤F¡C
¦pªG³sµ²¾¹³sµ²¥¢±Ñ¡A§i¶D§A§ä¤£¨ìlibg.a¡A¨º´N¬O¦b/usr/lib/
ªº¥Ø¿ý©³¤U¡A¤Ö¤Flibg.a
¡Clibg.a¬O¤@ÓC»y¨¥«Ü¯S§Oªº°»¿ùµ{¦¡®w¡C¤@¯ë¦blibcªº®M¥ó¤º´N·|´£¨Ñlibg.a¡F¤£µMªº¸Ü¡]·sª©¬O³o¼Ëªº¡^¡A§A¥i¯à»Ýn®³libcªºì©l½X¦Û¤v³]¸m¤F¡A¤£¹L¡A¹ê»Ú¤W§AÀ³¸Ó¤£»Ýn¤~¹ï¡C¤£ºÞ¬O¤°»ò¥Øªº¡A¤j³¡¥÷ªº±¡ªp¤U¡A¥u»Ý±Nlibg.a³sµ²¨ì/usr/lib/libc.a
¡A§A´N¯à±o¨ì¨¬°÷ªº¸ê°T¤F¡C
«Ü¦hªºGNU³nÅé¦b½sͳsµ²®É¡A³£·|³]©w-g
ªº¿ï¶µ¡F³o¼Ë°µ·|³y¦¨°õ¦æÀɹL¤jªº°ÝÃD¡]³q±`¬OÀRºAªº³sµ²¡^¡C¹ê»Ú¤W¡A³o¨Ã¤£¬O¤@ӫܼöªùªº·Qªk¡C
¦pªGµ{¦¡¥»¨¦³autoconf¡A²£¥Í¤Fconfigure
©R¥O½Z¡A³q±`§A´N¥i¥H¥Î./configure CFLAGS=
©Î¬O./configure CFLAGS=-O2
¨ÓÃö±¼°£¿ù¸ê°T¡C¤£µMªº¸Ü¡A§A±oÀˬdÀˬdMakefile¤F¡C·íµM°Õ¡A°²¦p§A¥Îªº¬OELF¡Aµ{¦¡«K·|¥H°ÊºAªº¤è¦¡¨Ó³sµ²¡A¤£½×¬O§_¦³-g
ªº³]©w¡F¦]¦¹§A¥i¥H¥±`¤ß§â-g®³±¼
¡C
¾ÚÁA¸Ñ¡A¤j³¡¥÷ªº¤H³£¬O¥Îgdb¨Ó°£¿ù¡C§A¥i¥H±qGNU archive sites®³¨ìì©lµ{¦¡¡F©ÎªÌ¬O¨ìtsx-11®³¥i°õ¦æÀÉ¡Cxxgdb¬O¤@ÓX¤¶±ªº°£¿ùµ{¦¡¡A´Ó°ò©ógdb¡]¤]´N¬O»¡§A±o¥ý¦w¸Ë¦ngdb¡A¤~¯à¦A¸Ëxxgdb¡^¡Cxxgdbªºì©l½X¥i¥H¦bftp://ftp.x.org/contrib/xxgdb-1.08.tar.gz§ä¨ì¡C
¥t¥~¡AUPS°£¿ùµ{¦¡¤w¥ÑRick Sladkey²¾´Ó¦¨¥\¡CUPS¥i¥H¦bX©³¤U¬¡±o«Ü¦n¡A¤£¹³xxgdb¨º¼Ë---¶È¶È¬OgdbªºX«eºÝ¤¶±¡]X front end¡^¡C³o¤ä°£¿ùµ{¦¡¦³¤@¤j°ïÀu¨}ªº¯SÂI¡A¦Ó¥B¦pªG§A±oªá®É¶¡¥h°£¤@¤ä¯}Äꪺµ{¦¡¡A«ØÄ³§A¦Ò¼{¦Ò¼{xxgdb¡C¨Æ¥ý½sͦnªºLinuxª©»P×¥¿ª©ªºì©l½X¥i¥H¦bftp://sunsite.unc.edu/pub/Linux/devel/debuggers/§ä¨ì¡C¦Ó³Ìªìªºì©lµ{¦¡«h©ñ¦b ftp://ftp.x.org/contrib/ups-2.45.2.tar.Z¡C
§A¥i¯à·|µo²{¥t¤@ӥΨӰ£¿ùªº¤u¨ãstrace¡A¤]¬O¬Û·íªº¦³¥Î¡C¥¦¥i¥HÅã¥Ü¥X¥Ñµ{§Ç©Ò²£¥Íªº¨t²Î©I¥s¡A¦Ó¥BÁÙ¾Ö¦³¨ä¥¦²³¦hÁc½Æªº¥\¯à¡A¹³¬O¦pªG§A¤âÃä¨S¦³ì©l½Xªº¸Ü¡Astrace¥i¥HÀ°§A§ä¥X¦³¨º¨Ç¸ô®|¦WºÙ¡]path-names¡^¤w½sͶi°õ¦æÀɤº¡F exacerbating race conditions in programs that you suspect contain them;ÁÙ¦³¡Astrace¥i®³¨Ó¾Ç²ßµ{¦¡¬O«ç»ò¦b¹q¸£¤¤°õ¦æªº¡C³Ì·sªºª©¥»¡]¥Ø«e¬O3.0.8¡^¥i¦b§ä¨ìftp://ftp.std.com/pub/jrs/¡C
¦´Á¨å«¬ªº±`¾nµ{¦¡(daemon programs)¬O°õ¦æfork()
¡AµM«á²×¤î¤÷µ{§Ç¡C³o¼Ëªº°µªk¨Ï±o°£¿ùªº®É¶¡´îµu¤F¡C
ÁA¸Ñ³oÂIªº³Ì²³æªº¤èªk´N¬O´Àfork()
³]¤@Ó¤¤Â_ÂI¡]breakpoint¡^¡C·íµ{¦¡°±¤î®É¡A±j¢fork()¶Ç¦^0¡C
(gdb) list
1 #include <stdio.h>
2
3 main()
4 {
5 if(fork()==0) printf("child\n");
6 else printf("parent\n");
7 }
(gdb) break fork
Breakpoint 1 at 0x80003b8
(gdb) run
Starting program: /home/dan/src/hello/./fork
Breakpoint 1 at 0x400177c4
Breakpoint 1, 0x400177c4 in fork ()
(gdb) return 0
Make selected stack frame return now? (y or n) y
#0 0x80004a8 in main ()
at fork.c:5
5 if(fork()==0) printf("child\n");
(gdb) next
Single stepping until exit from function fork,
which has no line number information.
child
7 }
·íLinux¶}¾÷®É¡A³q±`²ÕºA·|³]©w¦¨¤£n²£¥Í®Ö¤ßÀɮסCn¬O§A¨º»ò³ßÅw¥¦Ìªº¸Ü¡A¥i¥H¥Îshellªºbuiltin©R¥O¨Ï¨ä«·s¥Í®Ä¡G´NC-shell¬Û®eªºshell¡]¦ptcsh¡^¦Ó¨¥¡A·|¬O¤U±³o¼Ë¡G
% limit core unlimited
¦ÓÃþ¦üBourne shellªºshell¡]sh, bash, zsh, pdksh¡^«h¨Ï¥Î¤U±ªº»yªk¡G
$ ulimit -c unlimited
¦pªG§A·Qn¦³Ó¦h¤~¦hÃÀªº®Ö¤ßÀÉ©R¦W¡]core file naming¡^¡]for
example, if you're trying to conduct a post-mortem using a debugger that's buggy itself¡^¡A¨º»ò§A¥i¥H¹ï§Aªº®Ö¤ßµ{¦¡°µ¤@ÂI¤p¤pªº§ó°Ê¡C§ä¤@§äfs/binfmt_aout.c
»Pfs/binfmt_elf.c
Àɤ¤»P¤U¦C¬Û²Åªºµ{¦¡¤ù¬q(in newer kernels, you'll have to grep around a little in older ones)¡G
memcpy(corefile,"core.",5);
#if 0
memcpy(corefile+5,current->comm,sizeof(current->comm));
#else
corefile[4] = '\0';
#endif
±N0
´«¦¨1
.
ºÊºÞ¡]Profiling¡^¬O¥Î¨ÓÀˮ֤@¤äµ{¦¡¤¤¨º¨Ç³¡¥÷¬O³Ì±`©I¥s©Î¬O°õ¦æªº®É¶¡³Ì¤[ªº¤èªk¡C³o¹ïµ{¦¡ªº³Ì¨Î¤Æ»P§ä¥X¦ó®É®É¶¡¬O®ö¶O±¼ªº¦Ó¨¥¡A¬O¬Û·í¦nªº¤è¦¡¡C§A¥²¶·´N§A©Ònªº®Éµ{¸ê°T¡]timing information¡^ªº¥ØªºÀÉ¥[¤W-p
¨Ó½sĶ¡A¦Ó¥B¦pªGnÅý¿é¥XªºÀɮצ³·N¸q¡A§A¤]·|»Ýngprof
¡]¨Ó¦Ûbinutils®M¥óªº©R¥O¡^¡C°Ñ¾\gprof
ªºmanual page¡A¥i±oª¾¨ä²Ó¸`¡C
11/18/97Ķ