Put in remaining pages and wiki contents.
[ikiwiki.git] / docs / unknown / C_Development_Under_DragonFly_BSD.mdwn
1 # C Development Under DragonFly BSD \r
2 \r
3 This is the project page for "Developing for DragonFly BSD with the C programming language.". \r
4 \r
5 This is very much a  **work in progress** . Please check frequently for updates! \r
6 \r
7 At the moment, this outline (especially the part(s) at the end) is not in a logical order. This will need to be discussed. \r
8 \r
9  **Please keep these rules in mind when contributing!**  \r
10 \r
11 This document and contributions to this document are licensed to the DragonFly BSD project under the [C Book License](DragonFly_BSD_License]]. For all other use, please observe the [[/C_Book_License); the DragonFly BSD license does not apply to this external usage. The "DragonFly BSD project" is defined as the collective of individuals who would use this information to better their understanding of the DragonFly BSD operating system. \r
12 \r
14 * [Volume 1: C For Beginners](/Volume_1_C_For_Beginners)\r
16 * [Volume 2: Programming for the DragonFly BSD Userland](/Volume_2_Programming_for_the_DragonFly_BSD_Userland)\r
18 * [Volume 3: Developing the DragonFly BSD Kernel](/Volume_3_Developing_the_DragonFly_BSD_Kernel)\r
20 * [Volume 4: Resources for DragonFly BSD Developers](/Volume_4_Resources_for_DragonFly_BSD_Developers)\r
22 * [Volume 5: Networking and Interprocess Communication in DragonFly BSD](/Volume_5_Networking_and_Interprocess_Communication_in_DragonFly_BSD)\r
24 * [Volume 6: Secure Programming Concepts](/Volume_6_Secure_Programming_Concepts)\r
26 * [Volume 7: Glossary and Tables for all Volumes](/Volume_7_Glossary_and_Tables_for_all_Volumes)\r
27 \r
28 [[!toc  ]]\0\r
29 \r
30 <<Include(/Volume 1: C For Beginners)>>\r
31 \r
32 ## Those are obsolete now:\r
33 ## [[Include(/Volume 2: Programming for the DragonFly BSD Userland)]]\r
34 \r
35 ## [[Include(/Volume 3: Developing the DragonFly BSD Kernel)]]\r
36 \r
37 ## [[Include(/Volume 4: Resources for DragonFly BSD Developers)]]\r
38 \r
39 ## [[Include(/Volume 5: Networking and Interprocess Communication in DragonFly BSD)]]\r
40 \r
41 ## [[Include(/Volume 6: Secure Programming Concepts)]]\r
42 \r
43 ## Glossary \r
44 \r
45 \r
46 # Unorganized Info \r
47 \r
48 \r
49 ## Optimization  \r
50 Discuss the concept of optimization \r
51 Compiler optimization \r
52 Useful compiler options \r
53 Tips for guiding the compiler to make certain optimizations \r
54 Code profiling \r
55 Speed of various library functions \r
56 Overview, exercises and examples \r
57 \r
58 \r
59 Section Notes \r
60 \r
61 \r
62 # Debugging \r
63 ## Using the GDB debugger \r
64 \r
65 The GDB (GNU Debugger) gives you the facility to control and examine your program while runtime and after a crash. To compile a program with debugging information, add the compiler flag '-g', be sure to omit optimization flags. \r
66 \r
67 To debug a program, you can either start it in the debugger \r
68     \r
69     % gdb ./a.out\r
70     % gdb /usr/bin/gzip\r
71     (gdb) run -9 file.txt  \r
72 \r
73 or attach to a running process \r
74     \r
75     (gdb) attach PID\r
76 \r
77 \r
78 The FSF provides the GDB manual (http://sources.redhat.com/gdb/current/onlinedocs/gdb_toc.html) \r
79 Debugging malloc\r
80 \r
81 Errors in allocating and deallocating memory in C can lead to strange behaviour of the program. Crashes can occur, a memory leak can degrade system performance and even a heap overflow can threaten the system. \r
82 \r
83 The malloc implementation that is used by DragonFly BSD (phkmalloc) comes with some means of debugging memory allocation: \r
84 the name of the file referenced by the symbolic link named /etc/malloc.conf \r
85 the value of the environment variable MALLOC_OPTIONS \r
86 and the string pointed to by the global variable _malloc_options \r
87 \r
88 will be interpreted, in that order, character by character as flags. See malloc(3) for the flags. \r
89 ## Third Party malloc debuggers \r
90 \r
91 ElectricFence (http://perens.com/FreeSoftware/ElectricFence/) by Bruce Perens can spot overruns of boundaries of memory chunks and read and write access to memory chunks that have been released already. \r
92 \r
93 Valgrind (http://valgrind.kde.org/) is another memory debugger that can detect memory managment bugs \r
94 \r
95 \r
96 Reading output \r
97 Dereferencing of variables and areas of memory \r
98 The usage of breakpoints \r
99 Backtracing \r
100 Write abilities \r
101 \r
102 The above seems given and could probably be aptly explained in a mere couple of paragraphs. What other kind of beef can we put in this kind of chapter? \r
103 ### Section Notes \r
104 \r
105 \r
106 # Authors and Contributors \r
107 \r
108 (Listed alphabetically): Samy Al Bahra - Christian Klein - Adrian Nida - Devon H. O'Dell - Simon Schubert - Sascha Wildner \r
109 \r
110 Small improvements: WMD\r