Controlling elaboration order in C++ programming


 
Thread Tools Search this Thread
Top Forums Programming Controlling elaboration order in C++ programming
# 1  
Old 12-26-2014
Controlling elaboration order in C++ programming

It's been a long time since I fought this battle .... Smilie

I have an application written in c++, very much written in objects, etc. I have a makefile that compiles and links the application.

I am running this on a Linux (Fedora 20) platform and all works just fine, but when I compile and link in a cygwin environment on a Windows platform, the application fails during initialization. I suspect I have an elaboration problem and simply don't know/remember how to manage elaboration order in this c++ environment.

Can anybody give me some pointers? Documentation to read? Experiences?

Thanks.

Bill Lee
# 2  
Old 12-29-2014
Maybe put a log to syserr in the constructors of your objects, so you can see what is different when it fails?

Comparison between GNAT and C/C++ Compilation Models - GNAT User's Guide for Native Platforms / Unix and Windows
# 3  
Old 12-29-2014
Quote:
Originally Posted by DGPickett
Maybe put a log to syserr in the constructors of your objects, so you can see what is different when it fails?

Comparison between GNAT and C/C++ Compilation Models - GNAT User's Guide for Native Platforms / Unix and Windows
I wouldn't log to syserr using C++ streams - that could impact constructor order.

I'd recommend only C-style IO and the use of "fprintf( stderr, ... )". Don't even do any additional informational-style calls, for example if the objects have some equivalent of Java's tostring() method. No C++ at all.

If you're trying to run down problems C++ ordering problems, don't make it more complex with debugging code that you won't even compile much less run in a production version of the software.
# 4  
Old 12-30-2014
Yes, exactly -- you can make them print in debug mode, perhaps defined by an env. var, not using any objects, just C-isms.
Code:
int global_debug = -1 ; // In global space
 .
 .
 .
// top of constructor for class XXXXX
if ( global_debug < 0 ){
  if ( NULL == getenv( "DEBUG" )){
    global_debug = 0 ;
  } else {
    global_debug = 1 ;
  }
}
if ( global_debug ){
  fputs( "\nObject XXXXX Constructor start.\n", stderr );
}


Last edited by DGPickett; 12-30-2014 at 04:42 PM..
# 5  
Old 01-01-2015
Quote:
Originally Posted by DGPickett
Yes, exactly -- you can make them print in debug mode, perhaps defined by an env. var, not using any objects, just C-isms.
Code:
int global_debug = -1 ; // In global space
 .
 .
 .
// top of constructor for class XXXXX
if ( global_debug < 0 ){
  if ( NULL == getenv( "DEBUG" )){
    global_debug = 0 ;
  } else {
    global_debug = 1 ;
  }
}
if ( global_debug ){
  fputs( "\nObject XXXXX Constructor start.\n", stderr );
}

But then you'd be distributing code with debug strings in it - might not be something you'd want to do, given what developers can put in debug strings.

Nor may you want customers to be able to run in debug mode. Or maybe you DO want that.

Just be aware of what's in that binary and what it can do.

Fun problem for those with too much time on their hands (or a requirement to do it): come up with a secure way to modify debug level while the process is still running.
# 6  
Old 01-02-2015
Simple: Put debug level in a file and 'mmap()' the file. The controlling variable is in the VM space of the process but anyone with write permission can change it. To use a binary int, you need an app to change the value. Note that if the file is on NFS, values set elsewhere are not seen unless the file status is read, like with 'ls -l', on the target machine.
# 7  
Old 01-05-2015
have you got GDB on cygwin? if it creates a core file you can use it to find where it fails?

or strace this can often give good clues too.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Red Hat

"rhgb quiet" controlling the display of commands in single user mode ?"rhgb quiet" controlling the d

Why does removing "rhgb quiet" from the kernel boot parameters control whether or not the commands I enter are displayed in single user mode ? For instance, if I do not remove "rhgb quiet", when I am in single user mode, whatever command I type will not be displayed on the screen. The... (0 Replies)
Discussion started by: Hijanoqu
0 Replies

2. UNIX for Dummies Questions & Answers

Carreer:Networking Programming in Unix (C programming Language)

Hello, I am trying to learn Networking Programming in C in unix enviorment. I want to know how good it is to become a network programmer. i am crazy about Network programming but i also want to opt for the best carreer options. Anybody experienced Network Programmer, please tell me is my... (5 Replies)
Discussion started by: vibhory2j
5 Replies

3. Shell Programming and Scripting

Controlling depth with find

I have the following script: Now they have added on a new requirement, they only want to go to a certain depth in the directories returned. How do I code it to only go say 3 directories deeper than $DIRECTORY? (12 Replies)
Discussion started by: la_womn
12 Replies

4. Shell Programming and Scripting

ps: no controlling terminal

Any one know the below means : ps: no controlling terminal I had run a script in background : nohup ./benchmark.sh & and shutdown my windows system from where i connected through SSH I am using bash: The above script perfoms various tasks of Benchmarking Repositories Today the... (3 Replies)
Discussion started by: sriram003
3 Replies

5. UNIX Desktop Questions & Answers

Controlling icon placement?

Hi, I'm using xterm and aixterm with Mwm on AIX, and having trouble controlling icon placement when minimising windows. Basically when I run an xterm or aixterm I want to be able to specify where the icon will be if minimised. The man page mentions the "#geometry Geometry" option to aixterm,... (1 Reply)
Discussion started by: cunningdavid
1 Replies

6. Filesystems, Disks and Memory

Controlling I/O

Hi guys, Can anyone please tell me how I can control the I/O on my hardware devices in Suse Linux 8.1. I find that everytime I am reading a CD, or copying from a CD, I am unable to listen to music of watch a movie. Maybe this is intended to be like so, for the current high street technolgy... (1 Reply)
Discussion started by: bionicfysh
1 Replies

7. Programming

controlling terminal

What is controlling terminal in the case of daemon process? (2 Replies)
Discussion started by: Madhu Babu
2 Replies

8. Programming

Controlling Tty For A Process

I have developed a Code to find out number and name of processes currently running in SunOS Release 5.8 Server. I have used 'prpsinfo' structure to retrieve process details. But however I am unable to decompose the controlling terminal for the processes. The member variable pr_lttydev holds... (1 Reply)
Discussion started by: S.P.Prasad
1 Replies

9. UNIX for Dummies Questions & Answers

Controlling logfiles

I support an app that outputs alert and audit messages to one log file (vendor says they can't be separated). The script that I have written takes a copy (mv cmd) of the file to do the separation and reformatting. I have a problem that I loose records (messages are being written constantly, upto 3+... (5 Replies)
Discussion started by: nhatch
5 Replies

10. Shell Programming and Scripting

controlling screen display

How can I control the screen output when trying to read a large file onto the screen x number of lines at a time. I'm trying to use this is a bourne shell script. I want to display 10 lines of a file, pause the screen so that a user can read the file, and then display the next 10 lines of the file,... (6 Replies)
Discussion started by: jrdnoland1
6 Replies
Login or Register to Ask a Question