Problem sa gdb-om(DDD)
Dobrodošli, Gost. Molim vas prijavite se ili se registrujte.

Prijavite se sa korisničkim imenom, lozinkom i dužinom sesije

Linuxo Forumi

Stranice: [1]   Idi dole
  Štampaj  
Autor Tema: Problem sa gdb-om(DDD)  (Pročitano 1403 puta)
0 članova i 1 posetilac pregledaju ovu temu.
stanko
Jr. Member
**
Van mreže Van mreže

Pol: Muškarac
Poruke: 81



« poslato: 31 Август 2007, 19:24:48 »

Moram da debugg-ujem jedan C program ali nailazim na mali problem...
Ovako izgleda deo koda,tacnije pocetak main-a:
Kod:
....

int main(int argc, char *argv[]){
char c;
int task,syscall,idt,symbol,network,finger,check,device,kernel,archi,ommap,map,all;
char *archiarg, *kernelarg, *devicearg, *taskarg, *maparg, *fingerarg, *allarg;

task = syscall = idt = symbol = network = finger = check = device = kernel = archi = ommap = map = all = 0;

archiarg = kernelarg = devicearg = taskarg = maparg = fingerarg = allarg = NULL;

if(getuid() != 0){
fprintf(stderr, "You must be root !!\n");
exit(-1);
}

while((c = getopt(argc, argv, "hz:vp::sxnf:ict:d:a:k:m")) != -1){
switch(c){
case 'h' :
help(argv[0]);
break;
case 'z' :
all++;
allarg = optarg;
break;
case 'v' :
printf("VERSION %s\n", VERSION);
exit(0);
break;
case 'p':
task++;
if(optarg != NULL)
taskarg = optarg+1;
break;
...
Koristim DDD i hocu da stavim breakpoint na case 'z' ali mi to nista ne znaci dok ne prosledim argument z.
Da li moze nekako da se prosledi ili da menjam kod tj. da ucitavam arg posebno???
Prijavi uredniku   Sačuvana

UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity.
jboban
Hero Member
*****
Van mreže Van mreže

Pol: Muškarac
Poruke: 850



« Odgovor #1 poslato: 31 Август 2007, 22:38:48 »

Da li moze nekako da se prosledi ili da menjam kod tj. da ucitavam arg posebno???
Ako sam dobro razumeo, prilikom starta gdb-a prosledi mu program i željeni parametar:
Kod:
gdb program z
Prijavi uredniku   Sačuvana
stanko
Jr. Member
**
Van mreže Van mreže

Pol: Muškarac
Poruke: 81



« Odgovor #2 poslato: 01 Септембар 2007, 13:56:16 »

Hm,mislim da to tako neide...taj drugi argument koji si naveo(z) gdb razume da je to folder u koji zelim uci...i on naravno ne postoji.
Mnogo bi mi prakticnije bilo kada bih mogao da debugg-ujem preko gdb-a ali koristeci DDD...
Prijavi uredniku   Sačuvana

UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity.
sysctl
Full Member
***
Van mreže Van mreže

Pol: Muškarac
Poruke: 168


spiderpig


« Odgovor #3 poslato: 01 Септембар 2007, 16:08:08 »

A sta kaze

Kod:
gdb program -z

(crtica ispred z)

getopt parzuje switch-eve iz argv
Prijavi uredniku   Sačuvana

Kod:
    fprintf(stderr,"iza svakog %d ugla vreba Dragan Kojic Keba\n",i++);
stanko
Jr. Member
**
Van mreže Van mreže

Pol: Muškarac
Poruke: 81



« Odgovor #4 poslato: 01 Септембар 2007, 16:19:49 »

gdb: unrecognized option `-z'

Da,getopt parsuje switcheve...i nije mi problem da to prepravim na drugi nacin ali me prosto zanima da li je ikako moguce proslediti argument i da pritom ostavim kod kakav jeste.
Prijavi uredniku   Sačuvana

UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity.
sysctl
Full Member
***
Van mreže Van mreže

Pol: Muškarac
Poruke: 168


spiderpig


« Odgovor #5 poslato: 01 Септембар 2007, 17:08:24 »

Ok, probaj ovako.

Kod:
gdb mojprog
(gdb) set args z
(gdb) break mojprog.c:20
(gdb) run

Ovo mojprog.c:20 je ima fajla izvornog koda i linija gde hoces da postavis break
sada sa print ime promenljive ispitujes njihove vrednosti, npr za promenljivu x

Kod:
(gdb) print x

kada hoces da nastavis

Kod:
(gdb) continue

E sad malo sam zardjao, ali ptype x daje tip promenljive, bt je stacktrace, sa frame se setas po stack-u koje je dao bt, a up i down se seta po jedan frejm gore i dole, valjda.
Prijavi uredniku   Sačuvana

Kod:
    fprintf(stderr,"iza svakog %d ugla vreba Dragan Kojic Keba\n",i++);
stanko
Jr. Member
**
Van mreže Van mreže

Pol: Muškarac
Poruke: 81



« Odgovor #6 poslato: 01 Септембар 2007, 18:27:42 »

OK,evo ovako izgleda:

Kod:
(gdb) set args z
(gdb) break main.c:70
Breakpoint 1 at 0x804972e: file main.c, line 70.
(gdb) run
Starting program: program z
Help : -h

Program exited normally.
...sto znaci da treba ipak -z
Kod:
(gdb) set args -z
Starting program: program -z
program: option requires an argument -- z
Help : -h

Program exited normally.
:Smiley ?

Ovo set args funkcionise samo mi nije jasno kako da zadam argument?
Program u konsoli normalno pozivam sa program -z  ali... :Smiley
Prijavi uredniku   Sačuvana

UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity.
sysctl
Full Member
***
Van mreže Van mreže

Pol: Muškarac
Poruke: 168


spiderpig


« Odgovor #7 poslato: 01 Септембар 2007, 18:37:03 »

Da, da, to sam i mislio -z. Nego problem je ovde

Kod:
while((c = getopt(argc, argv, "hz:vp::sxnf:ict:d:a:k:m")) != -1){

gore u kodu iza z stoji dvotacka (z:), a koliko se secam za getopt dvotacka iza switcha znaci da on zahteva argument na primer mojprog -z 2, u tvom slicaju je allarg char*, pa znaci mojprog -z tekst
ako ne navedes argument iza z, onda se parzuje drugi switch sto i daje gresku.

Sta kaze izlaz mojprog -z bez ikakvih drugih argumenata. Vise detalja za getopt: man 3 getopt

znaci argument zadajes sa

Kod:
(gdb) set args -z neki_tekst

i naravno sve druge argumenta koji su potrebni
« Poslednja izmena: 01 Септембар 2007, 18:48:29 od sysctl » Prijavi uredniku   Sačuvana

Kod:
    fprintf(stderr,"iza svakog %d ugla vreba Dragan Kojic Keba\n",i++);
stanko
Jr. Member
**
Van mreže Van mreže

Pol: Muškarac
Poruke: 81



« Odgovor #8 poslato: 02 Септембар 2007, 14:38:36 »

 embarassed
Neznam zasto sam sve vreme pokusavao sa program -z kada sam uvek program pozivao sa
program -z <ime fingerprinta> ...jos jednom... embarassed
@sysctl
...izgleda da se dobro secas,svaka cast Afro

Ljudi,hvala vam!
Prijavi uredniku   Sačuvana

UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity.
Stranice: [1]   Idi gore
  Štampaj  
 
Prebaci se na: