blob: 2f0c068058d6cd5bb851b43d6493b434d79a6a19 (
plain) (
tree)
|
|
<!DOCTYPE html>
<html dir="ltr" lang="en">
<head>
<meta charset='utf-8'>
<title>C & GDB</title>
</head>
<body>
<a href="../index.html">Development Index</a>
<h1>C & GDB</h1>
<h2 id="hello">Hello World</h2>
<p>Create file hello.c with;</p>
<pre>
#include <stdio.h>
int main() {
printf("Hello World!");
return 0;
}
</pre>
<p>Compile;</p>
<pre>
$ gcc -Wall hello.c -o hello
</pre>
<p>Run;</p>
<pre>
$./hello
Hello World!
</pre>
<h2 ="sources">Multiple Sources</h2>
<p>To organize code in multiple files split above
example in main.c, hello.c and hello.h. Content of
main.c;<p>
<pre>
#include "hello.h"
int main() {
hello("world");
return 0;
}
</pre>
<p>Header file contains declaration of the function hello,
content of hello.h;</p>
<pre>
void hello(const char* name);
</pre>
<p>Implementation of hello function in hello.c;</p>
<pre>
#include <stdio.h>
#include "hello.h"
void hello(const char* name) {
printf("Hello, %s!\n", name);
}
</pre>
<p>Compile;</p>
<pre>
$ gcc -Wall main.c hello.c -o hello
</pre>
<h2 id="makefile">Makefile</h2>
<p>Make reads a Makefile by default on current directory,
Makefile defines targets, for example executables and their
dependencies, for example object files and source files.<p>
<p>Create Makefile;</p>
<pre>
CC=gcc
CFLAGS=-Wall
hello: main.o hello.o
clean:
rm -f hello main.o hello.o
</pre>
<pre>
$ touch NEWS README AUTHORS ChangeLog
</pre>
<h2 id="debug">Debug</h2>
<p>To use gdb you need to compile program with -g flag. Change
Makefile</p>
<pre>
CC=gcc
CFLAGS=-Wall -g
hello: main.o hello.o
clean:
rm -f hello main.o hello.o
</pre>
<pre>
$ gdb hello
</pre>
<p>Set break point;</p>
<pre>
(gdb) break main
</pre>
<p>To start the program you can type run, this way gdb
will try to run the program until the end. If program
crash, gdb will stop it for debuging. Start program;</p>
<pre>
(gdb) run
</pre>
<p>Step in next line;</p>
<pre>
(gdb) s
</pre>
<p>Print variable "name" value;</p>
<pre>
(gdb) print name
$1 = 0x4005b0 "world"
(gdb)
</pre>
<p>Print variable "name" type;</p>
<pre>
(gdb) ptype name
type = const char *
(gdb)
</pre>
<p>Variable is a <a href="elements.html#const">string constant</a>.
Execute next line to end;</p>
<pre>
(gdb) n
</pre>
<a href="../index.html">Development Index</a>
<p>
This is part of the Hive System Documentation.
Copyright (C) 2018
Hive Team.
See the file <a href="../../fdl-1.3-standalone.html">Gnu Free Documentation License</a>
for copying conditions.</p>
</body>
</html>
|