1 |
On Sun, 2005-11-27 at 15:22 +0000, Edward Catmur wrote: |
2 |
> On Sun, 2005-11-27 at 08:40 -0500, Ned Ludd wrote: |
3 |
> > On Sun, 2005-11-27 at 15:09 +0200, Ivan Yosifov wrote: |
4 |
> > > And one more thing. For proper debugging, don't I need the source to be |
5 |
> > > present ? |
6 |
> > |
7 |
> > -g3 -ggdb embeds the source code in the debug info so I don't see the |
8 |
> > point. |
9 |
> |
10 |
> It doesn't; at least not with gcc 3.4.4. It does embed function |
11 |
> prototypes and macro definitions, though. |
12 |
> |
13 |
> Ed Catmur |
14 |
|
15 |
Eh? |
16 |
|
17 |
|
18 |
solar@simple ~ $ gcc -g3 -nopie -ggdb segfault_me.c -o segfault_me |
19 |
solar@simple ~ $ paxctl -permsx segfault_me |
20 |
solar@simple ~ $ gdb -q ./segfault_me |
21 |
Using host libthread_db library "/lib/libthread_db.so.1". |
22 |
(gdb) b main |
23 |
Breakpoint 1 at 0x804853d: file segfault_me.c, line 25. |
24 |
(gdb) step |
25 |
The program is not being run. |
26 |
(gdb) r |
27 |
Starting program: /home/solar/segfault_me |
28 |
|
29 |
Breakpoint 1, main () at segfault_me.c:25 |
30 |
25 foo(); |
31 |
(gdb) step |
32 |
foo () at segfault_me.c:17 |
33 |
17 int i = 0; |
34 |
(gdb) |
35 |
18 for (i = 0 ; i < 3; i++) { |
36 |
(gdb) |
37 |
19 printf("Just an example %d\n", i); |
38 |
(gdb) |
39 |
Just an example 0 |
40 |
18 for (i = 0 ; i < 3; i++) { |
41 |
(gdb) |
42 |
19 printf("Just an example %d\n", i); |
43 |
(gdb) |
44 |
Just an example 1 |
45 |
18 for (i = 0 ; i < 3; i++) { |
46 |
(gdb) |
47 |
19 printf("Just an example %d\n", i); |
48 |
(gdb) |
49 |
Just an example 2 |
50 |
18 for (i = 0 ; i < 3; i++) { |
51 |
(gdb) |
52 |
21 bar(); |
53 |
(gdb) |
54 |
bar () at segfault_me.c:13 |
55 |
13 baz(); |
56 |
(gdb) |
57 |
baz () at segfault_me.c:9 |
58 |
9 atexit(break_self); |
59 |
(gdb) |
60 |
10 } |
61 |
(gdb) |
62 |
bar () at segfault_me.c:14 |
63 |
14 } |
64 |
(gdb) |
65 |
foo () at segfault_me.c:22 |
66 |
22 } |
67 |
(gdb) |
68 |
main () at segfault_me.c:26 |
69 |
26 return 0; |
70 |
(gdb) |
71 |
27 } |
72 |
(gdb) |
73 |
0x400407b6 in __libc_start_main () from /lib/libc.so.6 |
74 |
(gdb) |
75 |
Single stepping until exit from function __libc_start_main, |
76 |
which has no line number information. |
77 |
|
78 |
Program received signal SIGSEGV, Segmentation fault. |
79 |
0x40050681 in kill () from /lib/libc.so.6 |
80 |
(gdb) |
81 |
|
82 |
solar@simple ~ $ cat segfault_me.c |
83 |
#include <stdio.h> |
84 |
#include <signal.h> |
85 |
|
86 |
void break_self() { |
87 |
kill(getpid(), SIGSEGV); |
88 |
} |
89 |
|
90 |
int baz() { |
91 |
atexit(break_self); |
92 |
} |
93 |
|
94 |
void bar() { |
95 |
baz(); |
96 |
} |
97 |
|
98 |
void foo() { |
99 |
int i; |
100 |
for (i = 0 ; i < 3; i++) { |
101 |
printf("Just an example %d\n", i); |
102 |
} |
103 |
bar(); |
104 |
} |
105 |
|
106 |
int main() { |
107 |
foo(); |
108 |
return 0; |
109 |
} |
110 |
|
111 |
|
112 |
|
113 |
# While single stepping sure looks like source code to me. |
114 |
|
115 |
solar@simple ~ $ gcc -v 2>&1 | tail -n 1 |
116 |
gcc version 3.4.4 (Gentoo Hardened 3.4.4, HTB-3.4.4_pre-1.00, |
117 |
ssp-3.4.4-1.0, pie-8.7.8) |
118 |
|
119 |
-- |
120 |
Ned Ludd <solar@g.o> |
121 |
Gentoo Linux |
122 |
|
123 |
-- |
124 |
gentoo-dev@g.o mailing list |