Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
Code Kitchen Allgemeines Coder-Forum rund um das Programmieren eigenständiger, ausführbarer Programme.

C++ Debuggen

Diskussion: C++ Debuggen im Forum Code Kitchen, in der Kategorie Software Home; Anzeige Hi, ich finde irgendwie nichts ( also die Frage schon, nur keine richtige Antwort ) wie ich ein C++ ...

Antwort
Alt 10.01.08, 22:33   #1 (permalink)
 
Registriert seit: 19.08.04
Dawen Leistung: Addierstift
Likes: 1
Standard C++ Debuggen

Anzeige

Hi,

ich finde irgendwie nichts ( also die Frage schon, nur keine richtige Antwort ) wie ich ein C++ Programm mit dem GDB debuggen kann.

Code:
class Test
{
	private:
		void print(void)
		{
			printf("Hallo\n");
		}
};

int main(void)
{
	Test p;
	return 0;
}
Ich würde nun z.B. gerne mit disas mit den Code von Test::print() anschauen, wie mach ich das ?
Dawen ist offline   Mit Zitat antworten
Alt 10.01.08, 22:38   #2 (permalink)
Moderator
 
Benutzerbild von bitmuncher
 
Registriert seit: 30.09.06
bitmuncher Quadcorebitmuncher Quadcorebitmuncher Quadcorebitmuncher Quadcorebitmuncher Quadcorebitmuncher Quadcore
Likes: 441
Standard

Einfach einen Breakpoint auf deine print-Funktion setzen.
__________________
Mein Blog - Mein Job - Diaspora

Der Ring uns zu knechten besteht aus 12 Sternen auf blauem Grund.

Neue Beiträge im Habo via Twitter - Das HaBo auf FB - Das HaBo bei G+
bitmuncher ist gerade online   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 10.01.08, 23:51   #3 (permalink)
Themenstarter
 
Registriert seit: 19.08.04
Dawen Leistung: Addierstift
Likes: 1
Standard

Okay, wenn ich nun ein "break 4" mache, was habe ich davon ?

Ich will ja davon den wie in einem C Programm mit disas den Code anschauen ?
Dawen ist offline   Mit Zitat antworten
Alt 11.01.08, 10:25   #4 (permalink)
Moderator
 
Benutzerbild von bitmuncher
 
Registriert seit: 30.09.06
bitmuncher Quadcorebitmuncher Quadcorebitmuncher Quadcorebitmuncher Quadcorebitmuncher Quadcorebitmuncher Quadcore
Likes: 441
Standard

Warum kompilierst du nicht einfach mit 'g++ -S'? Dann bekommst du deinen Assembler-Code.
__________________
Mein Blog - Mein Job - Diaspora

Der Ring uns zu knechten besteht aus 12 Sternen auf blauem Grund.

Neue Beiträge im Habo via Twitter - Das HaBo auf FB - Das HaBo bei G+
bitmuncher ist gerade online   Mit Zitat antworten
Alt 11.01.08, 19:16   #5 (permalink)
Themenstarter
 
Registriert seit: 19.08.04
Dawen Leistung: Addierstift
Likes: 1
Standard

Kannst du mir nicht auf meine Frage antworten oder willst du mir nicht auf meine Frage antworten.

Ich möchte gerne wissen :

Zitat:
Hi,

ich finde irgendwie nichts ( also die Frage schon, nur keine richtige Antwort ) wie ich ein C++ Programm mit dem GDB debuggen kann.
Code:
class Test
{
	private:
		void print(void)
		{
			printf("Hallo\n");
		}
};

int main(void)
{
	Test p;
	return 0;
}
Ich würde nun z.B. gerne mit disas mit den Code von Test::print() anschauen, wie mach ich das ?
Ist doch eine klare Frage oder

Zitat:
Einfach einen Breakpoint auf deine print-Funktion setzen.
Ist keine Antwort auf meine Frage !

Zitat:
Warum kompilierst du nicht einfach mit 'g++ -S'? Dann bekommst du deinen Assembler-Code.
Ist keine Antwort auf meine Frage !

Mich interessiert nicht nur der ASM Code sondern die gesamte Ausgabe vom GDB

Code:
class Test
{
	private:
		void print(void)
		{
			printf("print()\n");
		}
};

void xprint(void)
{
	printf("xprint()\n");
}

int main(void)
{
	return 0;
}
Zitat:
(gdb) disas xprint
Dump of assembler code for function _Z6xprintv:
0x0804846e <_Z6xprintv+0>: push %ebp
0x0804846f <_Z6xprintv+1>: mov %esp,%ebp
0x08048471 <_Z6xprintv+3>: sub $0x8,%esp
0x08048474 <_Z6xprintv+6>: movl $0x804854c,(%esp)
0x0804847b <_Z6xprintv+13>: call 0x80483a8 <puts@plt>
0x08048480 <_Z6xprintv+18>: leave
0x08048481 <_Z6xprintv+19>: ret
End of assembler dump.
(gdb) disas Test:print
No symbol "Test" in current context.
(gdb) disas print
No symbol "print" in current context.
(gdb)
Dawen ist offline   Mit Zitat antworten
Alt 11.01.08, 19:20   #6 (permalink)
 
Benutzerbild von mauralix
 
Registriert seit: 17.04.06
mauralix Leistung: 8086
Likes: 3
Standard

Hast du kein Visual Studio?
mauralix ist offline   Mit Zitat antworten
Alt 11.01.08, 19:43   #7 (permalink)
Themenstarter
 
Registriert seit: 19.08.04
Dawen Leistung: Addierstift
Likes: 1
Standard

Zitat:
Original von mauralix
Hast du kein Visual Studio?
Da bei mir in der Firma momentan alles auf ein anderes neues Projekt umgestellt wird, habe ich momentan nicht mal Windows

Aber wie würde ich es unter Visual Studio machen ?
Dawen ist offline   Mit Zitat antworten
Alt 11.01.08, 19:50   #8 (permalink)
 
Benutzerbild von mauralix
 
Registriert seit: 17.04.06
mauralix Leistung: 8086
Likes: 3
Standard

Zitat:
Original von Dawen
Zitat:
Original von mauralix
Hast du kein Visual Studio?
Da bei mir in der Firma momentan alles auf ein anderes neues Projekt umgestellt wird, habe ich momentan nicht mal Windows

Aber wie würde ich es unter Visual Studio machen ?
Das ist kinderleicht. An der Stelle wo den Breakpoint haben willst links doppelt hinklicken oder F9 Drücken. Visual Studio bietet eigene Buttons zum Durchsteppen. Ansonsten stepst du mit F10 bzw. F11 durch.
mauralix ist offline   Mit Zitat antworten
Alt 12.01.08, 13:39   #9 (permalink)
 
Registriert seit: 16.12.06
mastermix252 Leistung: Facit NTK
Likes: 0
Standard

Wie jetzt ... möchtest due wissen WIE die Funktion printf() aufgebaut ist in dem du debuggst ?? ....

C++ Builder ..( und auch bei anderen ) einfach ein Breakpint setzen wie schon 3 mal gesagt wurde... und dann F7 drücken um in die funktion zu gehen.

Ansonsten wenn das nicht die richtige antwort ist musst du deine frage neu formulieren. weil ich hab deine frage am anfang gar nicht verstanden.

hadebakalem ciaaao
mastermix252 ist offline   Mit Zitat antworten
Alt 12.01.08, 14:42   #10 (permalink)
Moderator
 
Benutzerbild von bitmuncher
 
Registriert seit: 30.09.06
bitmuncher Quadcorebitmuncher Quadcorebitmuncher Quadcorebitmuncher Quadcorebitmuncher Quadcorebitmuncher Quadcore
Likes: 441
Standard

Hmm, stimmt, da die Funktion private ist und nirgendwo aufgerufen wird (z.B. im Klassen-Konstruktor, bringt ein Breakpoint wenig und gdb kennt diese Funktion auch nicht. Hatte ich nicht drauf geachtet.

In diesem Fall ist die Antwort auf deine Frage... Du kannst diese Funktion nicht debuggen. Um sie debuggen zu können muss sie public sein und im Programmfluss aufrufbar. Der Code muss also so ausshen, damit du die Funktion disassemblieren kannst:

Code:
#include <iostream>

class Test
{
public:
  void print(void)
    {
      printf("Hallo\n");
    }
};

int main(void)
{
  Test p;
  p.print();
  return 0;
}
Dann kannst du die Funktion disassemblieren:

Code:
bitmuncher@admin-laptop:~$ g++ -o test -ggdb test.cpp
bitmuncher@admin-laptop:~$ gdb ./test
GNU gdb 6.6-debian
Copyright (C) 2006 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "i486-linux-gnu"...
Using host libthread_db library "/lib/tls/i686/cmov/libthread_db.so.1".
(gdb) disas Test::print
Dump of assembler code for function _ZN4Test5printEv:
0x080485f0 <_ZN4Test5printEv+0>:        push   %ebp
0x080485f1 <_ZN4Test5printEv+1>:        mov    %esp,%ebp
0x080485f3 <_ZN4Test5printEv+3>:        sub    $0x8,%esp
0x080485f6 <_ZN4Test5printEv+6>:        movl   $0x80486cc,(%esp)
0x080485fd <_ZN4Test5printEv+13>:       call   0x80484a8 <puts@plt>
0x08048602 <_ZN4Test5printEv+18>:       leave
0x08048603 <_ZN4Test5printEv+19>:       ret
End of assembler dump.
(gdb)
oder halt einen Breakpoint setzen und dann beim Stop des Programmablaufs disas anwenden.

Code:
(gdb) break Test::print
Breakpoint 1 at 0x80485f6: file test.cpp, line 8.
(gdb) run
Starting program: /home/bitmuncher/test

Breakpoint 1, Test::print (this=0xbfdb43f3) at test.cpp:8
8             printf("Hallo\n");
(gdb) disas
Dump of assembler code for function _ZN4Test5printEv:
0x080485f0 <_ZN4Test5printEv+0>:        push   %ebp
0x080485f1 <_ZN4Test5printEv+1>:        mov    %esp,%ebp
0x080485f3 <_ZN4Test5printEv+3>:        sub    $0x8,%esp
0x080485f6 <_ZN4Test5printEv+6>:        movl   $0x80486cc,(%esp)
0x080485fd <_ZN4Test5printEv+13>:       call   0x80484a8 <puts@plt>
0x08048602 <_ZN4Test5printEv+18>:       leave
0x08048603 <_ZN4Test5printEv+19>:       ret
End of assembler dump.
(gdb)
__________________
Mein Blog - Mein Job - Diaspora

Der Ring uns zu knechten besteht aus 12 Sternen auf blauem Grund.

Neue Beiträge im Habo via Twitter - Das HaBo auf FB - Das HaBo bei G+
bitmuncher ist gerade online   Mit Zitat antworten
Alt 14.01.08, 00:47   #11 (permalink)
Themenstarter
 
Registriert seit: 19.08.04
Dawen Leistung: Addierstift
Likes: 1
Standard

Zitat:
In diesem Fall ist die Antwort auf deine Frage
Das hilft mir erstmal weiter, danke !
Dawen ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Software Home » Code Kitchen » C++ Debuggen
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Programmabsturz debuggen? metax. Linux/UNIX 2 16.07.08 20:31
Altes Dosprogramm debuggen. Clickme Hacks & Crackmes 3 08.04.07 18:01
Problem beim Debuggen C++ Programmen C/C++ Code Kitchen 7 16.11.06 16:53
Mechwarrior3 schmiert ab -> debuggen? noobhacker Games 6 31.07.06 14:24
GDB - Assemblercode debuggen [gelöst] v01d Linux/UNIX 0 21.07.06 09:01


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61