Почетак › Форуми › Линукс › Програмирање › Problem sa gdb-om(DDD)
- Ова тема има 8 одговора, 3 гласа, а последњи пут ју је ажурирао
stanko, 19 година, 1 месец раније.
-
АуторЧланци
-
31. август 2007. у 6:24 pm #9151
stanko
УчесникMoram da debugg-ujem jedan C program ali nailazim na mali problem…
Ovako izgleda deo koda,tacnije pocetak main-a:[code]
….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;
…
[/code]
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???31. август 2007. у 9:38 pm #61088jboban
Учесник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:
[code]gdb program z[/code]1. септембар 2007. у 12:56 pm #61089stanko
Учесник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…1. септембар 2007. у 3:08 pm #61090sysctl
УчесникA sta kaze
[code]
gdb program -z
[/code](crtica ispred z)
getopt parzuje switch-eve iz argv
1. септембар 2007. у 3:19 pm #61091stanko
Учесник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.
1. септембар 2007. у 4:08 pm #61092sysctl
УчесникOk, probaj ovako.
[code]
gdb mojprog
(gdb) set args z
(gdb) break mojprog.c:20
(gdb) run
[/code]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[code]
(gdb) print x
[/code]kada hoces da nastavis
[code]
(gdb) continue
[/code]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.
1. септембар 2007. у 5:27 pm #61093stanko
УчесникOK,evo ovako izgleda:
[code]
(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 : -hProgram exited normally.
[/code]
…sto znaci da treba ipak -z
[code]
(gdb) set args -z
Starting program: program -z
program: option requires an argument — z
Help : -hProgram exited normally.
[/code]
::) ?Ovo set args funkcionise samo mi nije jasno kako da zadam argument?
Program u konsoli normalno pozivam sa program -z ali… ::)1. септембар 2007. у 5:37 pm #61094sysctl
УчесникDa, da, to sam i mislio -z. Nego problem je ovde
[code]
while((c = getopt(argc, argv, “hz:vp::sxnf:ict:d:a:k:m”)) != -1){
[/code]gore u kodu iza z stoji dvotacka (z:), a koliko se secam za getopt dvotacka iza switcha znaci da on zahteva argument na primer [tt]mojprog -z 2[/tt], u tvom slicaju je allarg char*, pa znaci [tt]mojprog -z tekst[/tt]
ako ne navedes argument iza z, onda se parzuje drugi switch sto i daje gresku.Sta kaze izlaz [tt]mojprog -z[/tt] bez ikakvih drugih argumenata. Vise detalja za getopt: [tt]man 3 getopt[/tt]
znaci argument zadajes sa
[code]
(gdb) set args -z neki_tekst
[/code]i naravno sve druge argumenta koji su potrebni
2. септембар 2007. у 1:38 pm #61095 -
АуторЧланци
Мораш бити пријављен да би поставио коментар у овој теми.