Odštampaj stranicu - Problem sa gdb-om(DDD)

Linuxo Forumi

Linux => Programiranje => Temu započeo: stanko 31 Август 2007, 19:24:48



Naslov: Problem sa gdb-om(DDD)
Poruka od: stanko 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???


Naslov: Odg: Problem sa gdb-om(DDD)
Poruka od: jboban 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


Naslov: Odg: Problem sa gdb-om(DDD)
Poruka od: stanko 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...


Naslov: Odg: Problem sa gdb-om(DDD)
Poruka od: sysctl 01 Септембар 2007, 16:08:08
A sta kaze

Kod:
gdb program -z

(crtica ispred z)

getopt parzuje switch-eve iz argv


Naslov: Odg: Problem sa gdb-om(DDD)
Poruka od: stanko 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.


Naslov: Odg: Problem sa gdb-om(DDD)
Poruka od: sysctl 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.


Naslov: Odg: Problem sa gdb-om(DDD)
Poruka od: stanko 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.
::) ?

Ovo set args funkcionise samo mi nije jasno kako da zadam argument?
Program u konsoli normalno pozivam sa program -z  ali... ::)


Naslov: Odg: Problem sa gdb-om(DDD)
Poruka od: sysctl 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


Naslov: Odg: Problem sa gdb-om(DDD)
Poruka od: stanko 02 Септембар 2007, 14:38:36
 :redface:
Neznam zasto sam sve vreme pokusavao sa program -z kada sam uvek program pozivao sa
program -z <ime fingerprinta> ...jos jednom... :redface:
@sysctl
...izgleda da se dobro secas,svaka cast O0

Ljudi,hvala vam!


Powered by SMF 1.1.7 | SMF © 2005, Simple Machines LLC | Srpski prevod uredio: tomaja [linuxo.org]
Joomla Bridge by JoomlaHacks.com