RFOG | 12 Apr 15:15 2011
Picon

Sustituir funciones de una biblioteca por las tuyas propias

Hola a todos.

En Visual C++ es tan sencillo como poner el cuerpo de la función a sustituir en algún lado. El linker, si encuentra una función en los ficheros objeto que también está en alguna biblioteca, emite un warning y pone la propia en lugar de la de la biblioteca.

Parece ser que GNU no lo hace así. Protesta con redefiniciones y termina no enlazando. 

He buscado por ahí y no veo cómo hacerlo así de fácil...

Ideas?

--
Microsoft Visual C++ MVP => http://geeks.ms/blogs/rfog

--
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
En caso de duda visita "http://groups.google.com/group/cppba"
RFOG | 12 Apr 15:37 2011
Picon

Re: Sustituir funciones de una biblioteca por las tuyas propias

Os pego un ejemplo con una sola redefinición:

../../libs/hardware/81-19703-15\libpluto8.a(carmine.o): In function `CalypsoCopySprite': H:\pluto8\software\fasttrack\libs\hardware/carmine.c:1327: multiple definition of `CalypsoCopySprite' graphics.o:blabla\Software\HoldEm\HoldEm/graphics.c:1684: first defined here blabla/holdem/software/coldfire_gnu_cross_compiler/bin/../lib/gcc/m6
8k-elf/4.1.1/../../../../m68k-elf/bin/ld.exe: Warning: size of symbol `CalypsoCo
pySprite' changed from 18 in graphics.o to 248 in ../../libs/hardware/81-19703-1
5\libpluto8.a(carmine.o)
collect2: ld returned 1 exit status

El 12 de abril de 2011 15:15, RFOG <rafael.ontivero-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> escribió:
Hola a todos.

En Visual C++ es tan sencillo como poner el cuerpo de la función a sustituir en algún lado. El linker, si encuentra una función en los ficheros objeto que también está en alguna biblioteca, emite un warning y pone la propia en lugar de la de la biblioteca.

Parece ser que GNU no lo hace así. Protesta con redefiniciones y termina no enlazando. 

He buscado por ahí y no veo cómo hacerlo así de fácil...

Ideas?

--
Microsoft Visual C++ MVP => http://geeks.ms/blogs/rfog



--
Microsoft Visual C++ MVP => http://geeks.ms/blogs/rfog

--
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
En caso de duda visita "http://groups.google.com/group/cppba"
Daniel Gutson | 12 Apr 18:03 2011
Picon

Re: Re: Sustituir funciones de una biblioteca por las tuyas propias

No entiendo bien, pero no es esto lo q necesitás no?

http://en.wikipedia.org/wiki/Weak_symbol

2011/4/12 RFOG <rafael.ontivero-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Os pego un ejemplo con una sola redefinición:

../../libs/hardware/81-19703-15\libpluto8.a(carmine.o): In function `CalypsoCopySprite': H:\pluto8\software\fasttrack\libs\hardware/carmine.c:1327: multiple definition of `CalypsoCopySprite' graphics.o:blabla\Software\HoldEm\HoldEm/graphics.c:1684: first defined here blabla/holdem/software/coldfire_gnu_cross_compiler/bin/../lib/gcc/m6
8k-elf/4.1.1/../../../../m68k-elf/bin/ld.exe: Warning: size of symbol `CalypsoCo
pySprite' changed from 18 in graphics.o to 248 in ../../libs/hardware/81-19703-1
5\libpluto8.a(carmine.o)
collect2: ld returned 1 exit status

El 12 de abril de 2011 15:15, RFOG <rafael.ontivero-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> escribió:

Hola a todos.

En Visual C++ es tan sencillo como poner el cuerpo de la función a sustituir en algún lado. El linker, si encuentra una función en los ficheros objeto que también está en alguna biblioteca, emite un warning y pone la propia en lugar de la de la biblioteca.

Parece ser que GNU no lo hace así. Protesta con redefiniciones y termina no enlazando. 

He buscado por ahí y no veo cómo hacerlo así de fácil...

Ideas?

--
Microsoft Visual C++ MVP => http://geeks.ms/blogs/rfog



--
Microsoft Visual C++ MVP => http://geeks.ms/blogs/rfog

--
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
En caso de duda visita "http://groups.google.com/group/cppba"



--
Who’s got the sweetest disposition?
One guess, that’s who?
Who’d never, ever start an argument?
Who never shows a bit of temperament?
Who's never wrong but always right?
Who'd never dream of starting a fight?
Who get stuck with all the bad luck?

--
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
En caso de duda visita "http://groups.google.com/group/cppba"
RFOG | 12 Apr 20:53 2011
Picon

Re: Re: Sustituir funciones de una biblioteca por las tuyas propias

Eso es.

Pero justo al revés. Yo no tengo el fuente de la biblioteca para redefinir
esas funciones weak, que son las que quiero quitar temporalmente porque es  
una compilación condicional de debug...

Imagina que quisiera hacerme mi printf propio pero sin tocar para nada las  
librerías base. Y te digo printf porque en san gugol hay como cien mil  
entradas sobre eso mismo pero ninguna me dice cómo hacerlo "ala" visual c++

On Tue, 12 Apr 2011 18:03:39 +0200, Daniel Gutson <danielgutson@...>
wrote:

> No entiendo bien, pero no es esto lo q necesitás no?
> http://en.wikipedia.org/wiki/Weak_symbol
>
> 2011/4/12 RFOG <rafael.ontivero@...>
>
>> Os pego un ejemplo con una sola redefinición:
>>
>> ../../libs/hardware/81-19703-15\libpluto8.a(carmine.o): In function
>> `CalypsoCopySprite':
>> H:\pluto8\software\fasttrack\libs\hardware/carmine.c:1327: multiple
>> definition of `CalypsoCopySprite'
>> graphics.o:blabla\Software\HoldEm\HoldEm/graphics.c:1684: first defined  
>> here
>> blabla/holdem/software/coldfire_gnu_cross_compiler/bin/../lib/gcc/m6
>> 8k-elf/4.1.1/../../../../m68k-elf/bin/ld.exe: Warning: size of symbol
>> `CalypsoCo
>> pySprite' changed from 18 in graphics.o to 248 in
>> ../../libs/hardware/81-19703-1
>> 5\libpluto8.a(carmine.o)
>> collect2: ld returned 1 exit status
>>
>> El 12 de abril de 2011 15:15, RFOG <rafael.ontivero@...> escribió:
>>
>> Hola a todos.
<recorte>
>>
>>
>>
>> --
>> Microsoft Visual C++ MVP => http://geeks.ms/blogs/rfog
>>
>> --
>> ¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has  
>> recibido
>> este mesaje por error.
>> En caso de duda visita "http://groups.google.com/group/cppba"
>>
>
>
>

-- 
Microsoft Visual C++ MVP => http://geeks.ms/blogs/rfog
========================================
Toda existencia individual está determinada por innumerables influencias
del ambiente humano.
		-- Georg Simmel. (1858-1918) Filósofo alemán.

--

-- 
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error. 
En caso de duda visita "http://groups.google.com/group/cppba"

Daniel Gutson | 12 Apr 21:47 2011
Picon

Re: Re: Sustituir funciones de una biblioteca por las tuyas propias



2011/4/12 RFOG <rafael.ontivero-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Eso es.

Pero justo al revés. Yo no tengo el fuente de la biblioteca para redefinir
esas funciones weak, que son las que quiero quitar temporalmente porque es una compilación condicional de debug...

Imagina que quisiera hacerme mi printf propio pero sin tocar para nada las librerías base. Y te digo printf porque en san gugol hay como cien mil entradas sobre eso mismo pero ninguna me dice cómo hacerlo "ala" visual c++

Opción #1:

hacer un global que funcione como
#define printf mi_printf

Eso lo hacés pasándole la opción de compilador
gcc -Dprintf=mi_printf

y en mi_printf.c

void mi_printf()
{
#undef printf
    printf();
#define printf mi_printf
}


Opción #2:

usando LD_PRELOAD (google).

 

On Tue, 12 Apr 2011 18:03:39 +0200, Daniel Gutson <danielgutson-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
wrote:


No entiendo bien, pero no es esto lo q necesitás no?
http://en.wikipedia.org/wiki/Weak_symbol

2011/4/12 RFOG <rafael.ontivero-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>

Os pego un ejemplo con una sola redefinición:

../../libs/hardware/81-19703-15\libpluto8.a(carmine.o): In function
`CalypsoCopySprite':
H:\pluto8\software\fasttrack\libs\hardware/carmine.c:1327: multiple
definition of `CalypsoCopySprite'
graphics.o:blabla\Software\HoldEm\HoldEm/graphics.c:1684: first defined here
blabla/holdem/software/coldfire_gnu_cross_compiler/bin/../lib/gcc/m6
8k-elf/4.1.1/../../../../m68k-elf/bin/ld.exe: Warning: size of symbol
`CalypsoCo
pySprite' changed from 18 in graphics.o to 248 in
../../libs/hardware/81-19703-1
5\libpluto8.a(carmine.o)
collect2: ld returned 1 exit status

El 12 de abril de 2011 15:15, RFOG <rafael.ontivero-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> escribió:

Hola a todos.
<recorte>



--

Microsoft Visual C++ MVP => http://geeks.ms/blogs/rfog

--
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido
este mesaje por error.
En caso de duda visita "http://groups.google.com/group/cppba"






--
Microsoft Visual C++ MVP => http://geeks.ms/blogs/rfog
========================================
Toda existencia individual está determinada por innumerables influencias
del ambiente humano.
               -- Georg Simmel. (1858-1918) Filósofo alemán.



--
Who’s got the sweetest disposition?
One guess, that’s who?
Who’d never, ever start an argument?
Who never shows a bit of temperament?
Who's never wrong but always right?
Who'd never dream of starting a fight?
Who get stuck with all the bad luck?

--
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
En caso de duda visita "http://groups.google.com/group/cppba"
RFOG | 12 Apr 23:20 2011
Picon

Re: Re: Sustituir funciones de una biblioteca por las tuyas propias

Como no había respuesta aquí, usé una variante de la opción A, que no me  
parece del todo correcta (ni la tuya ni la mía).

La B la investigaré mañana en el curro a ver...

Mi variante A ha sido definir DEBUG_NO_GRAPHICS y luego, en el fichero  
fuente donde está todo lo gráfico, al principio:

#ifdef DEBUG_NO_GRAPHICS
WORD miFuncionGrafica(blablabla)
{
}
#else
#define miFunconGrafica FuncionGraficaOriginal
#endif

Y cambiar en todo el fuente FuncionGraficaOriginal por miFuncionGrafica...

On Tue, 12 Apr 2011 21:47:21 +0200, Daniel Gutson
<danielgutson@...>  
wrote:

> 2011/4/12 RFOG <rafael.ontivero@...>
>
>> Eso es.
>>
>> Pero justo al revés. Yo no tengo el fuente de la biblioteca para  
>> redefinir
>> esas funciones weak, que son las que quiero quitar temporalmente porque  
>> es
>> una compilación condicional de debug...
>>
>> Imagina que quisiera hacerme mi printf propio pero sin tocar para nada  
>> las
>> librerías base. Y te digo printf porque en san gugol hay como cien mil
>> entradas sobre eso mismo pero ninguna me dice cómo hacerlo "ala" visual  
>> c++
>>
>
> Opción #1:
>
> hacer un global que funcione como
> #define printf mi_printf
>
> Eso lo hacés pasándole la opción de compilador
> gcc -Dprintf=mi_printf
>
> y en mi_printf.c
>
> void mi_printf()
> {
> #undef printf
>     printf();
> #define printf mi_printf
> }
>
>
> Opción #2:
>
> usando LD_PRELOAD (google).
>
>
>
>>
>> On Tue, 12 Apr 2011 18:03:39 +0200, Daniel Gutson  
>> <danielgutson@...>
>> wrote:
>>
>>
>>  No entiendo bien, pero no es esto lo q necesitás no?
<recorte>
>>
<recorte>
>>
>> --
>> Microsoft Visual C++ MVP => http://geeks.ms/blogs/rfog
>> ========================================
>> Toda existencia individual está determinada por innumerables influencias
>> del ambiente humano.
>>                -- Georg Simmel. (1858-1918) Filósofo alemán.
>>
>
>
>

-- 
Microsoft Visual C++ MVP => http://geeks.ms/blogs/rfog
========================================
Toda existencia individual está determinada por innumerables influencias  
del ambiente humano.
		-- Georg Simmel. (1858-1918) Filósofo alemán.

--

-- 
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error. 
En caso de duda visita "http://groups.google.com/group/cppba"

Daniel Gutson | 12 Apr 23:25 2011
Picon

Re: Re: Sustituir funciones de una biblioteca por las tuyas propias



2011/4/12 RFOG <rafael.ontivero-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Como no había respuesta aquí, usé una variante de la opción A, que no me parece del todo correcta (ni la tuya ni la mía).

La B la investigaré mañana en el curro a ver...

Mi variante A ha sido definir DEBUG_NO_GRAPHICS y luego, en el fichero fuente donde está todo lo gráfico, al principio:

#ifdef DEBUG_NO_GRAPHICS
WORD miFuncionGrafica(blablabla)
{
}
#else
#define miFunconGrafica FuncionGraficaOriginal
#endif

Y cambiar en todo el fuente FuncionGraficaOriginal por miFuncionGrafica...

Eso es exactamente lo que te quería evitar :D
 


On Tue, 12 Apr 2011 21:47:21 +0200, Daniel Gutson <danielgutson-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:

2011/4/12 RFOG <rafael.ontivero-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>

Eso es.

Pero justo al revés. Yo no tengo el fuente de la biblioteca para redefinir
esas funciones weak, que son las que quiero quitar temporalmente porque es
una compilación condicional de debug...

Imagina que quisiera hacerme mi printf propio pero sin tocar para nada las
librerías base. Y te digo printf porque en san gugol hay como cien mil
entradas sobre eso mismo pero ninguna me dice cómo hacerlo "ala" visual c++


Opción #1:

hacer un global que funcione como
#define printf mi_printf

Eso lo hacés pasándole la opción de compilador
gcc -Dprintf=mi_printf

y en mi_printf.c

void mi_printf()
{
#undef printf
   printf();
#define printf mi_printf
}


Opción #2:

usando LD_PRELOAD (google).




On Tue, 12 Apr 2011 18:03:39 +0200, Daniel Gutson <danielgutson-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
wrote:


 No entiendo bien, pero no es esto lo q necesitás no?
<recorte>

<recorte>

--
Microsoft Visual C++ MVP => http://geeks.ms/blogs/rfog
========================================
Toda existencia individual está determinada por innumerables influencias
del ambiente humano.
              -- Georg Simmel. (1858-1918) Filósofo alemán.






--
Microsoft Visual C++ MVP => http://geeks.ms/blogs/rfog
========================================
Toda existencia individual está determinada por innumerables influencias del ambiente humano.
               -- Georg Simmel. (1858-1918) Filósofo alemán.



--
Who’s got the sweetest disposition?
One guess, that’s who?
Who’d never, ever start an argument?
Who never shows a bit of temperament?
Who's never wrong but always right?
Who'd never dream of starting a fight?
Who get stuck with all the bad luck?

--
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
En caso de duda visita "http://groups.google.com/group/cppba"
Ing. Esteban D. Papp | 12 Apr 23:32 2011
Picon

Re: Re: Sustituir funciones de una biblioteca por las tuyas propias

Usa la pin tool de intel:
http://www.pintool.org/

Eso reemplaza las funciones con saltos a tus funciones que luego saltan a las originales (similar a lo que se hace con la cadena de llamadas de manejadores de interrupciones). Se usa para profiling, pero tambien sirve para tu caso.
Lo bueno es que no es invasivo, asi que no tenes que modificar tu codigo.

Aca lo estamos usando, inclusive tenemos a uno de los escritores de la tool.

salu2
estebanp


2011/4/12 RFOG <rafael.ontivero-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Como no había respuesta aquí, usé una variante de la opción A, que no me parece del todo correcta (ni la tuya ni la mía).

La B la investigaré mañana en el curro a ver...

Mi variante A ha sido definir DEBUG_NO_GRAPHICS y luego, en el fichero fuente donde está todo lo gráfico, al principio:

#ifdef DEBUG_NO_GRAPHICS
WORD miFuncionGrafica(blablabla)
{
}
#else
#define miFunconGrafica FuncionGraficaOriginal
#endif

Y cambiar en todo el fuente FuncionGraficaOriginal por miFuncionGrafica...


On Tue, 12 Apr 2011 21:47:21 +0200, Daniel Gutson <danielgutson-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:

2011/4/12 RFOG <rafael.ontivero-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>

Eso es.

Pero justo al revés. Yo no tengo el fuente de la biblioteca para redefinir
esas funciones weak, que son las que quiero quitar temporalmente porque es
una compilación condicional de debug...

Imagina que quisiera hacerme mi printf propio pero sin tocar para nada las
librerías base. Y te digo printf porque en san gugol hay como cien mil
entradas sobre eso mismo pero ninguna me dice cómo hacerlo "ala" visual c++


Opción #1:

hacer un global que funcione como
#define printf mi_printf

Eso lo hacés pasándole la opción de compilador
gcc -Dprintf=mi_printf

y en mi_printf.c

void mi_printf()
{
#undef printf
   printf();
#define printf mi_printf
}


Opción #2:

usando LD_PRELOAD (google).




On Tue, 12 Apr 2011 18:03:39 +0200, Daniel Gutson <danielgutson-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
wrote:


 No entiendo bien, pero no es esto lo q necesitás no?
<recorte>

<recorte>

--
Microsoft Visual C++ MVP => http://geeks.ms/blogs/rfog
========================================
Toda existencia individual está determinada por innumerables influencias
del ambiente humano.
              -- Georg Simmel. (1858-1918) Filósofo alemán.






--
Microsoft Visual C++ MVP => http://geeks.ms/blogs/rfog
========================================
Toda existencia individual está determinada por innumerables influencias del ambiente humano.
               -- Georg Simmel. (1858-1918) Filósofo alemán.

--
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.En caso de duda visita "http://groups.google.com/group/cppba"

--
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
En caso de duda visita "http://groups.google.com/group/cppba"
RFOG | 12 Apr 23:33 2011
Picon

Re: Re: Sustituir funciones de una biblioteca por las tuyas propias

On Tue, 12 Apr 2011 23:25:32 +0200, Daniel Gutson
<danielgutson@...>  
wrote:

> 2011/4/12 RFOG <rafael.ontivero@...>
>
>> Como no había respuesta aquí, usé una variante de la opción A, que no me
>> parece del todo correcta (ni la tuya ni la mía).
>>
>> La B la investigaré mañana en el curro a ver...
>>
>> Mi variante A ha sido definir DEBUG_NO_GRAPHICS y luego, en el fichero
>> fuente donde está todo lo gráfico, al principio:
>>
>> #ifdef DEBUG_NO_GRAPHICS
>> WORD miFuncionGrafica(blablabla)
>> {
>> }
>> #else
>> #define miFunconGrafica FuncionGraficaOriginal
>> #endif
>>
>> Y cambiar en todo el fuente FuncionGraficaOriginal por  
>> miFuncionGrafica...
>
>
> Eso es exactamente lo que te quería evitar :D
>

Bueno, al final no ha sido tan traumático, porque el código, pese a ser C  
porque no tengo más narices que lo sea, está "cplusplusizado". Las  
funciones de la librería son cinco, y en mi código no están más que seis o  
siete veces cada una sobre las típicas funciones de mover, poner, quitar  
sprites. Todo lo demás está construido sobre esos bloques y es agnóstico  
en cuanto a la plataforma.

Hazte a la idea que es un juego con algunas animaciones por sprites,  
quitar y poner sprites aquí y allá, todo sobre un chip con soporte de  
capas que usa la librería que te comento, que no es más que un thin  
(thin-ísimo diría yo) layer sobre el chip.

>
>>
>>
>> On Tue, 12 Apr 2011 21:47:21 +0200, Daniel Gutson  
>> <danielgutson@...>
>> wrote:
>>
>>  2011/4/12 RFOG <rafael.ontivero@...>
<recorte>
>>
<recorte>
>>
<recorte>
>>
>> --
>> Microsoft Visual C++ MVP => http://geeks.ms/blogs/rfog
>> ========================================
>> Toda existencia individual está determinada por innumerables influencias
>> del ambiente humano.
>>                -- Georg Simmel. (1858-1918) Filósofo alemán.
>>
>
>
>

-- 
Microsoft Visual C++ MVP => http://geeks.ms/blogs/rfog
========================================
Toda existencia individual está determinada por innumerables influencias  
del ambiente humano.
		-- Georg Simmel. (1858-1918) Filósofo alemán.

--

-- 
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error. 
En caso de duda visita "http://groups.google.com/group/cppba"

Daniel Gutson | 12 Apr 23:41 2011
Picon

Re: Re: Sustituir funciones de una biblioteca por las tuyas propias



2011/4/12 RFOG <rafael.ontivero-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
On Tue, 12 Apr 2011 23:25:32 +0200, Daniel Gutson <danielgutson <at> gmail.com> wrote:

Como no había respuesta aquí, usé una variante de la opción A, que no me
parece del todo correcta (ni la tuya ni la mía).

La B la investigaré mañana en el curro a ver...

Mi variante A ha sido definir DEBUG_NO_GRAPHICS y luego, en el fichero
fuente donde está todo lo gráfico, al principio:

#ifdef DEBUG_NO_GRAPHICS
WORD miFuncionGrafica(blablabla)
{
}
#else
#define miFunconGrafica FuncionGraficaOriginal
#endif

Y cambiar en todo el fuente FuncionGraficaOriginal por miFuncionGrafica...


Eso es exactamente lo que te quería evitar :D


Bueno, al final no ha sido tan traumático, porque el código, pese a ser C porque no tengo más narices que lo sea, está "cplusplusizado". Las funciones de la librería son cinco, y en mi código no están más que seis o siete veces cada una sobre las típicas funciones de mover, poner, quitar sprites. Todo lo demás está construido sobre esos bloques y es agnóstico en cuanto a la plataforma.

Hazte a la idea que es un juego con algunas animaciones por sprites, quitar y poner sprites aquí y allá, todo sobre un chip con soporte de capas que usa la librería que te comento, que no es más que un thin (thin-ísimo diría yo) layer sobre el chip.

Eso no quita de hacerlo con las herramientas más "correctas" (o menos chotas) q te dá el toolchain :)
Lo que yo te sugiero es usar cosas que no modifiquen el código, sino que en todo caso agreguen (en un fuente nuevo, acotado y controlado, ejemplo debug.c) estas cosas para poder sacarlas fácil después. Sino, si todo el mundo empieza a hacer cosas como esas, el código se vuelve inmantenible.
Con lo q yo te digo, sólo necesitás: un nuevo switch de command line (cosa q podés controlar desde el makefile), un extern en algún lado, y un .c que implemente tu código de testing.
De esa forma, todas las cosas nuevas que van apareciendo las metés en ese fuente aislado.

Es sumamente importante, cuando un proyecto empieza a tener envergadura, proveer herramientas de mantenimiento (ej: comando "maint" de gdb), en algunos casos esto se le llama la "debugging library" del proyecto.
Creo que tarde o temprano todo proyecto de tamaño decente cae en esta necesidad. Es por eso que hay que hacerla bien, pensando a futuro.
 





On Tue, 12 Apr 2011 21:47:21 +0200, Daniel Gutson <danielgutson-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
wrote:

 2011/4/12 RFOG <rafael.ontivero-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
<recorte>

<recorte>

<recorte>

--
Microsoft Visual C++ MVP => http://geeks.ms/blogs/rfog
========================================
Toda existencia individual está determinada por innumerables influencias
del ambiente humano.
              -- Georg Simmel. (1858-1918) Filósofo alemán.






--
Microsoft Visual C++ MVP => http://geeks.ms/blogs/rfog
========================================
Toda existencia individual está determinada por innumerables influencias del ambiente humano.
               -- Georg Simmel. (1858-1918) Filósofo alemán.



--
Who’s got the sweetest disposition?
One guess, that’s who?
Who’d never, ever start an argument?
Who never shows a bit of temperament?
Who's never wrong but always right?
Who'd never dream of starting a fight?
Who get stuck with all the bad luck?

--
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
En caso de duda visita "http://groups.google.com/group/cppba"

Gmane