Sponsored Content
Special Forums UNIX Desktop Questions & Answers Knowing the size and location of variables in a C program Post 302833697 by Corona688 on Wednesday 17th of July 2013 04:30:15 PM
Old 07-17-2013
Quote:
Originally Posted by Cambria
So I need some help with this. Pardon me if I'm posting in the wrong forum, after some googling for my answer and finding nothing I found this forum. It seemed appropriate for what I was seeking. I just didnt find a forum that concerned the use of GDB. I'm learning to use the C language and GDB. What I don't understand is how the computer knows how big each piece of a program is in memory, and how I could find my variable's in memory using GDB.
To get nice debugging information like that, you have to build the executable with debugging information(i.e. -ggdb). This embeds lots of offsets and labels inside the program file for gdb's convenience.

This is also why gdb has trouble when it steps into code outside your program, like libc... Libraries are probably not built with debugging information, so details about their insides will be very limited.

Quote:
I mean if all memory is numbered how can anyone including the CPU know where a word or giant or w/e starts and ends?
To put it bluntly -- it doesn't. They all become hardcoded segment offsets, in the end. Without debugging information, you're left with detective work.

Quote:
If I wanted to find my variable in memory after setting a break point in it and accessing the $esp register how would I know where my variables began and ended?
If your executable wasn't built with debugging info, that'd mean detective work.

Last edited by Corona688; 07-17-2013 at 05:38 PM..
 

10 More Discussions You Might Find Interesting

1. UNIX for Advanced & Expert Users

Dump program variables

Hi, Wish if could provide some clues. How do I dump all the C program variables(global) into say a file with their names and the values. So that when I restart the application again I could use this same file for reinitializing.Is this possible? Thanks, Reji (1 Reply)
Discussion started by: rejise
1 Replies

2. Programming

finding stack location in C using program

Is there a way to find the address of stack memory writing a program? Please guide me (12 Replies)
Discussion started by: jacques83
12 Replies

3. Solaris

How to know the size of the program currently executing in memory

hey everybody, i am currently working on solaris 10 os on a m5000 server. my problem is when i want the exact size of a program in execution, i am unable to do it. earlier i thought the RSS field of prstat but because of its large size it cant be the size. pmap -x shows some output but it includes... (2 Replies)
Discussion started by: aryansheikh
2 Replies

4. Shell Programming and Scripting

Environment variables location.

Hello everyone, I am trying to figure out where all of my environment variables are getting set. When I type env I get a whole list of them, about two pages full, yet I do not seem to find where they are initialized. I checked all of my .profile .login and .cshrc files (I do not seem to have any... (1 Reply)
Discussion started by: gio001
1 Replies

5. UNIX for Dummies Questions & Answers

Small Program with variables

Hello Geniuses of the unix world. please help, stupid chemist. I have the following script that I need to create a file. Doesnt make sense unless i explain this way: I need to create a file called summary.in I would like all these lines to be inserted however in the command line I would like the... (1 Reply)
Discussion started by: gingburg
1 Replies

6. UNIX for Dummies Questions & Answers

program location

Hello all, one of application on system requires that "uname" program is in "/usr/uname" location. I can find uname in "/usr/bin/uname" location. Is it possible to present the /usr/bin/uname as that it was located in /usr/uname location? Thank you in advanced, M (1 Reply)
Discussion started by: kreno
1 Replies

7. UNIX for Dummies Questions & Answers

I am not able to use variables in system command in a C program

this method is not working.I am having a problem to use variables in system command. i cannot use the variables in system command. this how i was did system("whereis command"); this method works very fine. but, i want use the commands as variable. that means i want only pass the variables.... (6 Replies)
Discussion started by: dhanda2601
6 Replies

8. UNIX for Dummies Questions & Answers

Knowing when a different program modifies a file

so i was testing something on a test box running linux. i manually vi'ed the /var/log/messages file. and i noticed, the file immediately stopped being updated. it wasn't until i restarted the syslog process that events started being recorded in it again. so that tells me, the syslog process... (20 Replies)
Discussion started by: SkySmart
20 Replies

9. Programming

Size of memory used by a program

Hello, Here is a portion of my code: a=(int *) malloc(dim*dim*sizeof(int)); b=(int *) malloc(dim*dim*sizeof(int)); c=(int *) malloc(dim*dim*sizeof(int)); for(i=0;i<dim;i++) for(j=0;j<dim;j++) c= rand(); for(i=0;i<dim;i++) for(j=0;j<dim;j++) b=rand(); ... (6 Replies)
Discussion started by: chercheur111
6 Replies

10. Shell Programming and Scripting

Curl to download file from subdivx.com after following location without knowing the file name/extens

This question could be specific to the site subdivx.com In the past, I've been able to download a file following location using cURL but there is something about subdivx.com that's different and can't figure out how to get it to work. I tried the following directly in the terminal with no... (5 Replies)
Discussion started by: MoonD
5 Replies
VGDB(1) 							   Release 3.9.0							   VGDB(1)

NAME
vgdb - intermediary between Valgrind and GDB or a shell SYNOPSIS
vgdb [options] DESCRIPTION
vgdb ("Valgrind to GDB") is used as an intermediary between Valgrind and GDB or a shell. It has two usage modes: 1. As a standalone utility, it is used from a shell command line to send monitor commands to a process running under Valgrind. For this usage, the vgdb OPTION(s) must be followed by the monitor command to send. To send more than one command, separate them with the -c option. 2. In combination with GDB "target remote |" command, it is used as the relay application between GDB and the Valgrind gdbserver. For this usage, only OPTION(s) can be given, but no COMMAND can be given. OPTIONS
--pid=<number> Specifies the PID of the process to which vgdb must connect to. This option is useful in case more than one Valgrind gdbserver can be connected to. If the --pid argument is not given and multiple Valgrind gdbserver processes are running, vgdb will report the list of such processes and then exit. --vgdb-prefix Must be given to both Valgrind and vgdb if you want to change the default prefix for the FIFOs (named pipes) used for communication between the Valgrind gdbserver and vgdb. --wait=<number> Instructs vgdb to search for available Valgrind gdbservers for the specified number of seconds. This makes it possible start a vgdb process before starting the Valgrind gdbserver with which you intend the vgdb to communicate. This option is useful when used in conjunction with a --vgdb-prefix that is unique to the process you want to wait for. Also, if you use the --wait argument in the GDB "target remote" command, you must set the GDB remotetimeout to a value bigger than the --wait argument value. See option --max-invoke-ms (just below) for an example of setting the remotetimeout value. --max-invoke-ms=<number> Gives the number of milliseconds after which vgdb will force the invocation of gdbserver embedded in Valgrind. The default value is 100 milliseconds. A value of 0 disables forced invocation. The forced invocation is used when vgdb is connected to a Valgrind gdbserver, and the Valgrind process has all its threads blocked in a system call. If you specify a large value, you might need to increase the GDB "remotetimeout" value from its default value of 2 seconds. You should ensure that the timeout (in seconds) is bigger than the --max-invoke-ms value. For example, for --max-invoke-ms=5000, the following GDB command is suitable: (gdb) set remotetimeout 6 --cmd-time-out=<number> Instructs a standalone vgdb to exit if the Valgrind gdbserver it is connected to does not process a command in the specified number of seconds. The default value is to never time out. --port=<portnr> Instructs vgdb to use tcp/ip and listen for GDB on the specified port nr rather than to use a pipe to communicate with GDB. Using tcp/ip allows to have GDB running on one computer and debugging a Valgrind process running on another target computer. Example: # On the target computer, start your program under valgrind using valgrind --vgdb-error=0 prog # and then in another shell, run: vgdb --port=1234 On the computer which hosts GDB, execute the command: gdb prog (gdb) target remote targetip:1234 where targetip is the ip address or hostname of the target computer. -c To give more than one command to a standalone vgdb, separate the commands by an option -c. Example: vgdb v.set log_output -c leak_check any -l Instructs a standalone vgdb to report the list of the Valgrind gdbserver processes running and then exit. -D Instructs a standalone vgdb to show the state of the shared memory used by the Valgrind gdbserver. vgdb will exit after having shown the Valgrind gdbserver shared memory state. -d Instructs vgdb to produce debugging output. Give multiple -d args to increase the verbosity. When giving -d to a relay vgdb, you better redirect the standard error (stderr) of vgdb to a file to avoid interaction between GDB and vgdb debugging output. SEE ALSO
valgrind(1), $INSTALL/share/doc/valgrind/html/index.html or http://www.valgrind.org/docs/manual/index.html, Debugging your program using Valgrind's gdbserver and GDB[1]vgdb[2], Valgrind monitor commands[3]. AUTHOR
Philippe Waroquiers. NOTES
1. Debugging your program using Valgrind's gdbserver and GDB http://www.valgrind.org/docs/manual/manual-core-adv.html#manual-core-adv.gdbserver 2. vgdb http://www.valgrind.org/docs/manual/manual-core-adv.html#manual-core-adv.vgdb 3. Valgrind monitor commands http://www.valgrind.org/docs/manual/manual-core-adv.html#manual-core-adv.valgrind-monitor-commands Release 3.9.0 11/01/2013 VGDB(1)
All times are GMT -4. The time now is 06:40 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy