GPF con hb_out.log

GPF con hb_out.log

Postby elvira » Mon Sep 23, 2013 4:44 pm

Antonio,

¿Sabes por qué sucede?.

Application Internal Error - C:\BIBLIO.EXE
Terminated at: 2013.09.23 16:05:14
Error irrecuperable 6005: Exception error:

Exception Code:C000001D
Exception Address:004257D4
EAX:000013EC EBX:007DDC20 ECX:00000002 EDX:010BAE5C
ESI:006E1C97 EDI:001534E0 EBP:0012F1A4
CS:EIP:001B:004257D4 SS:ESP:0023:0012F110
DS:0023 ES:0023 FS:003B GS:0000
Flags:00010216
CS:EIP: F2 0F 2A C0 F2 0F 59 05 D8 EF 65 00 F2 0F 10 0D
SS:ESP: 001534E0 006E1C97 010952EC 010BAE5C 010BAE5C 010BD23C 004955CA 010BAE6C 010BD23C 010BD214 00000031 010BD23C 001534E0 0012F1C8 006A3F99 007B87C8

C stack:
EIP: EBP: Frame: OldEBP, RetAddr, Params...
004257D4 0012F1A4 0012F1DC 00426AA7 2C010488 00000321 0000001F 00000000 00000000 00000000 00000000 00000014
00426AA7 0012F1DC 0012F248 00484F23 0000009A 00000004 010EAA34 00000000 00000000 0048C7F6 00000008 001534E0
00484F23 0012F248 0012F258 00435723 006E1C97 007DDC20
00435723 0012F258 0012F2D4 0048E593 006E0642 00000097 00000004 010EAA34 01220021 0000030A 0048C9B4 00000000


Modules:
0x00400000 0x00562000 C:\CLIENTE.EXE
0x7C910000 0x000B5000 C:\WINDOWS\system32\ntdll.dll
0x7C800000 0x00103000 C:\WINDOWS\system32\kernel32.dll
0x7E390000 0x00091000 C:\WINDOWS\system32\USER32.dll
0x77EF0000 0x00049000 C:\WINDOWS\system32\GDI32.dll
0x72F80000 0x00026000 C:\WINDOWS\system32\WINSPOOL.DRV
0x77DA0000 0x000AC000 C:\WINDOWS\system32\ADVAPI32.dll
0x77E50000 0x00092000 C:\WINDOWS\system32\RPCRT4.dll
0x77FC0000 0x00011000 C:\WINDOWS\system32\Secur32.dll
0x77BE0000 0x00058000 C:\WINDOWS\system32\msvcrt.dll
0x773A0000 0x00103000 C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.5512_x-ww_35d4ce83\COMCTL32.dll
0x77F40000 0x00076000 C:\WINDOWS\system32\SHLWAPI.dll
0x76360000 0x0004A000 C:\WINDOWS\system32\COMDLG32.dll
0x7E6A0000 0x00821000 C:\WINDOWS\system32\SHELL32.dll
0x774B0000 0x0013D000 C:\WINDOWS\system32\ole32.dll
0x770F0000 0x0008B000 C:\WINDOWS\system32\OLEAUT32.dll
0x77BD0000 0x00008000 C:\WINDOWS\system32\VERSION.dll
0x76330000 0x00005000 C:\WINDOWS\system32\MSIMG32.dll
0x7E1E0000 0x00022000 C:\WINDOWS\system32\oledlg.dll
0x63000000 0x000E6000 C:\WINDOWS\system32\WININET.dll
0x00390000 0x00009000 C:\WINDOWS\system32\Normaliz.dll
0x1A400000 0x00132000 C:\WINDOWS\system32\urlmon.dll
0x5DCA0000 0x001E8000 C:\WINDOWS\system32\iertutil.dll
0x71A50000 0x0000A000 C:\WINDOWS\system32\WSOCK32.dll
0x71A30000 0x00017000 C:\WINDOWS\system32\WS2_32.dll
0x71A20000 0x00008000 C:\WINDOWS\system32\WS2HELP.dll
0x73B00000 0x00013000 C:\WINDOWS\system32\AVICAP32.dll
0x76B00000 0x0002E000 C:\WINDOWS\system32\WINMM.dll
0x75ED0000 0x00021000 C:\WINDOWS\system32\MSVFW32.dll
0x76340000 0x0001D000 C:\WINDOWS\system32\IMM32.DLL
0x5B150000 0x00038000 C:\WINDOWS\system32\uxtheme.dll
0x746B0000 0x0004C000 C:\WINDOWS\system32\MSCTF.dll
0x75160000 0x0002E000 C:\WINDOWS\system32\msctfime.ime
0x76F90000 0x0007F000 C:\WINDOWS\system32\CLBCATQ.DLL
0x77010000 0x000D0000 C:\WINDOWS\system32\COMRes.dll
0x4DD40000 0x00083000 C:\Archivos de programa\Archivos comunes\System\ado\msado15.dll
0x766F0000 0x00025000 C:\WINDOWS\system32\MSDART.DLL
0x014B0000 0x002D6000 C:\WINDOWS\system32\xpsp2res.dll
0x73EF0000 0x00077000 C:\Archivos de programa\Archivos comunes\System\Ole DB\oledb32.dll
0x75100000 0x00013000 C:\Archivos de programa\Archivos comunes\System\Ole DB\OLEDB32R.DLL
0x1B570000 0x00054000 C:\WINDOWS\system32\msjetoledb40.dll
0x1B000000 0x00170000 C:\WINDOWS\system32\msjet40.dll
0x1B5D0000 0x00095000 C:\WINDOWS\system32\mswstr10.dll
0x1B2C0000 0x0000D000 C:\WINDOWS\system32\msjter40.dll
0x1B2D0000 0x0002D000 C:\WINDOWS\system32\MSJINT40.DLL
0x760A0000 0x0013C000 C:\WINDOWS\system32\comsvcs.dll
0x750C0000 0x00014000 C:\WINDOWS\system32\colbact.DLL
0x75080000 0x00013000 C:\WINDOWS\system32\MTXCLU.DLL
0x597F0000 0x00055000 C:\WINDOWS\system32\NETAPI32.dll
0x76D60000 0x00012000 C:\WINDOWS\system32\CLUSAPI.DLL
0x75040000 0x00012000 C:\WINDOWS\system32\RESUTILS.DLL
0x76630000 0x000B5000 C:\WINDOWS\system32\USERENV.dll
0x76980000 0x000B1000 C:\WINDOWS\system32\SXS.DLL
0x73F70000 0x00051000 C:\Archivos de programa\Archivos comunes\System\msadc\msadce.dll
0x1F370000 0x00005000 C:\Archivos de programa\Archivos comunes\System\msadc\msadcer.dll
0x1B800000 0x0003A000 C:\WINDOWS\system32\msjtes40.dll
0x0F9A0000 0x0000B000 C:\WINDOWS\system32\VBAJET32.DLL
0x0F9C0000 0x00062000 C:\WINDOWS\system32\expsrv.dll

Called from CREATESHADOW(0)
Called from TTITLE:PAINT(778) in .\source\classes\TTITLE.PRG
Called from (b)TTITLE(133) in .\source\classes\TTITLE.PRG
Called from TTITLE:DISPLAY(0) in .\source\classes\TTITLE.PRG
Called from TTITLE:HANDLEEVENT(1695) in .\source\classes\CONTROL.PRG
Called from _FWH(3183) in .\source\classes\WINDOW.PRG
Called from SYSREFRESH(0)
Called from PANEL(1013) in c:\FWH\prog\cliente.prg
Called from (b)EVAL(390)
Called from (b)MSGRUN(36) in .\source\function\MSGRUN.PRG
Called from (b)TDIALOG(88) in .\source\classes\DIALOG.PRG
Called from TDIALOG:DISPLAY(0) in .\source\classes\DIALOG.PRG
Called from TDIALOG:HANDLEEVENT(879) in .\source\classes\DIALOG.PRG
Called from DIALOGBOXINDIRECT(0)
Called from TDIALOG:ACTIVATE(274) in .\source\classes\DIALOG.PRG
Called from MSGRUN(42) in .\source\function\MSGRUN.PRG
Called from TWINDOW:ACTIVATE(989) in .\source\classes\WINDOW.PRG
------------------------------------------------------------------------
elvira
 
Posts: 515
Joined: Fri Jun 29, 2012 12:49 pm

Re: GPF con hb_out.log

Postby Antonio Linares » Mon Sep 23, 2013 5:01 pm

Elvira,

Por la pila de llamadas que se muestra, el GPF se produce desde la función CreateShadow() llamada desde el método Paint() de la Clase TTitle.
Pudiera ser que está recibiendo unos parámetros erróneos.

Puedes reproducirlo en un ejemplo pequeño ? gracias
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41366
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: GPF con hb_out.log

Postby Antonio Linares » Mon Sep 23, 2013 5:04 pm

Elvira,

Puedes indicarme que versión de FWH estás usando ?
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41366
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: GPF con hb_out.log

Postby elvira » Mon Sep 23, 2013 5:24 pm

Antonio,

Esto es con la 13.02 si no me equivoco.

Gracias ;))
elvira
 
Posts: 515
Joined: Fri Jun 29, 2012 12:49 pm

Re: GPF con hb_out.log

Postby Antonio Linares » Mon Sep 23, 2013 5:30 pm

Puedes comprobar la versión dentro de FiveWin.ch

Puedes proporcionar un pequeño ejemplo con el que se reproduzca el error ?
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41366
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: GPF con hb_out.log

Postby elvira » Mon Sep 23, 2013 9:01 pm

Antonio,

A nosotros ese código nos funciona sin problemas, no somos capaces de reproducir el error.

También clientes nos reportan algunas veces errores del tipo Can´t créate DIALOG, pero nosotros igualmente ese código funciona adecuadamente. Generalmente se producen al cabo de 45 minutos o más, y son aleatorios. No somos capaces de encontrar el patrón la verdad.

¿Por qué se pueden suceder estas cosas?.

Gracias ;)))
elvira
 
Posts: 515
Joined: Fri Jun 29, 2012 12:49 pm

Re: GPF con hb_out.log

Postby Antonio Linares » Tue Sep 24, 2013 5:52 am

Si los recursos estan dentro del EXE y ese EXE se ha cargado desde un ordenador remoto y ocurre un fallo en la red, entonces Windows no podria crear el diálogo (porque necesita volver a cargar una parte del EXE) y de ahí el error.

Pero mientras no tengamos un ejemplo concreto y reproducible, son solo suposiciones.

Pensar en Windows como un sistema operativo "perfecto" y en el que nada falla, es una ilusión. Si el ordenador no tiene memoria suficiente, si el ordenador esta haciendo otras cosas, etc. hay muchas circunstancias que pueden influir.

El método cientifico se basa en la reproducción objetiva de unas circunstancias consiguiendo un resultado determinado. Todo lo que no sea cientifico, es entrar en el terreno de las suposiciones. De aqui que si no hay un ejemplo reproducible, lamentablemente solo queda suponer...
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41366
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: GPF con hb_out.log

Postby hmpaquito » Tue Sep 24, 2013 7:47 am

Elvira,

La diferencia que yo he notado muchas veces entre lo que el desarrollador prueba y lo que el usuario hace es el tiempo de ejecucion del programa.
Un usuario prueba realmente el programa, dandole a esta opcion luego a la otra, ahora entro, ahora salgo... todo eso durante varias horas... nosotros, los desarrolladores, nos limitamos a probar el programa cinco minutos... ¿ qué decir tiene de que el usuario puede tener otra version de S.O. ?

Haz un seguimiento (log) a los recursos gdi... a la memoria disponible... podria ser que tuvieras alguna fuga de memoria... eso puede afectar y mucho... por ejemplo, de la mejor manera posible, para evitar ralentizacion de ejecucion, cuando creas un MsgRun(), graba en un log la memoria y los recursos usados y que te manden al cabo del dia el log, identificando en el log, el puesto, el S.O., memoria disponible (% memoria disponible) y recursos usados.

Yo de entrada, ... intentaria buscar una alternativa a la funcion CreateShadow() y si no la hay o no puedo hacerla, quitaria la llamada... se trata de saber si el problema esta en la clase TTitle o el programa unas veces da error ahi, pero otras veces lo da en otro sitio... caracteristica tipica de sobrecarga de recursos / memoria.

Resumiendo: haz un seguimiento de los objetos gdi usados y de la memoria disponible. Comprueba si los problemas en casa del usuario se producen siempre con el mismo S.O. Desactiva / cambia las funciones que con mayor frecuencia producen el error... el usuario seguro que prefiere no ver la sombrita de los Titles a tener que soportar un error, y que prueben asi el programa una temporadita para ver si el error esta focalizado en unos puntos o es mas generico.

Espero haberte podido ayudar/ orientar. Saludos.
hmpaquito
 
Posts: 1482
Joined: Thu Oct 30, 2008 2:37 pm

Re: GPF con hb_out.log

Postby Antonio Linares » Tue Sep 24, 2013 8:55 am

Totalmente de acuerdo con hmpaquito :-)

He sido más apasionado que lógico en mi análisis. Lo primero a comprobar es lo primero, y no se pueden obviar todas las comprobaciones básicas que de forma excelente te ha explicado hmpaquito
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41366
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: GPF con hb_out.log

Postby elvira » Tue Sep 24, 2013 12:02 pm

Amigos,

nosotros, los desarrolladores, nos limitamos a probar el programa cinco minutos


Lo siento, pero nosotros probamos a fondo el programa y tenemos VirtualBox para probarlo en varios sistemas operativos, y también tenemos PCS físicos con XP, Vista, 7 y 8.

Lo contrario es un poco chapucero y poco serio, ¿no te parece?.

A nosotros las porciones de código que dan problemas nos funcionan adecuadamente y a la gran mayoría de usuarios.

También siguiendo las amables indicaciones del Maestro hemos usado checkres y nosotros no tenemos pérdidas. A veces hay pérdidas de controles de Fivewin como el Richedit.

En un 2% de usuarios tenemos esos problemas, principalmente de Can´t créate Dialog box, y el equipo tiene suficiente memoria. No encontramos un patrón para ver que falla. A veces es con XP, otras con 7... Ya se que es difícil. He visto que otros compañeros del foro también muy minuciosos han tenido estas experiencias.

¿Y cómo sabemos estos fallos?. Porque recibimos los errores.log por ftp.

Un poco misterioso :? :? :? :o

Siento no poder aportar más y muy agradecida como siempre :D :D
elvira
 
Posts: 515
Joined: Fri Jun 29, 2012 12:49 pm

Re: GPF con hb_out.log

Postby hmpaquito » Tue Sep 24, 2013 4:02 pm

Antonio,

Antonio Linares wrote:Totalmente de acuerdo con hmpaquito :-)
He sido más apasionado que lógico en mi análisis. Lo primero a comprobar es lo primero, y no se pueden obviar todas las comprobaciones básicas que de forma excelente te ha explicado hmpaquito

Gracias por tus palabras.


He recordado, a propósito de gpfs, una curiosa casuística que se me dio hace tiempo:
//---------------------------------------------------------------------------//
HB_FUNC( CDLG2CHR )
{
BYTE bBuffer[ 250 ];
WORD wLen = sizeof( DIALOG_RES );



Desde tiempo inmemorial, de tamaño de buffer, en la funcion de arriba, tengo en vez del 250 un 850. Creo que lo puse por cuando el Caption fuera muy largo, ya que si no lo hacia asi daba errores gpf o similar. Me parece que en algunos casos el 850 me ha dado algun error... ¿ Puede que ese buffer pueda ser fuente del can´t create dialog box ?

Imaginate la situacion... el caption depende de un campo de descripcion (Caracter Longitud 100) de la base de datos... el desarrollador tiene puestas unas descripciones cortas, con datos test que segun su entendimiento seran las habituales, pero el usuario tiene una descripciones, EN ALGUNOS CASOS, mucho mas largas, tanto que pueden generar un gpf. Pues ahi tenemos un gpf, que parece aleatorio, que no es aleatorio, sino que depende de LOS DATOS DEL USUARIO. Entonces, el desarrollador, emocionado él por los buenos tests que ha hecho, no encuentra explicación alguna a lo que está pasando.

Un cordial saludo
hmpaquito
 
Posts: 1482
Joined: Thu Oct 30, 2008 2:37 pm

Re: GPF con hb_out.log

Postby elvira » Tue Sep 24, 2013 4:59 pm

Hola!!

Muchas gracias por la pista, pero no uso esta función. No la conocía.

Es cosa de las tripas de Fivewin, Antonio nos dirá a ver.

A la hora de hacer las pruebas, tenemos una base de datos real porque, como tu dices, si pones como nombre Evelin, es corto y no sirve. Por eso tenemos datos reales.
elvira
 
Posts: 515
Joined: Fri Jun 29, 2012 12:49 pm

Re: GPF con hb_out.log

Postby Antonio Linares » Tue Sep 24, 2013 5:09 pm

hmpaquito,

Felicitarte, antes que nada, por haber cazado un bug de FiveWin que lleva muchooo tiempo con nosotros y que nadie habia visto aún :-) Muchisimas gracias!

Este es el código correcto (probad a descomentar las 2 lineas en las que comparo wLen con wSize) y que usa la memoria exacta que necesita, ni más ni menos. Yo lo he estado probando y parece funcionar bien, os ruego a todos que lo probeis pues efectivamente como explica hmpaquito, este puede ser el origen de ese bug aleatorio de no poder crear un diálogo (por fin!) :-D

Code: Select all  Expand view
HB_FUNC( CDLG2CHR )
{
   WORD wLen = sizeof( DIALOG_RES );
   WORD wSize = sizeof( DIALOG_RES ) + ( hb_parclen( 6 ) * 2 ) +
                              1 + 2 + ( hb_parclen( 9 ) * 2 ) + 3;
   BYTE * bBuffer = hb_xgrab( wSize );
   LPSTR szText;
   int iLenUnicode;

   memset( ( char * ) bBuffer, 0, wSize );

   ( ( DIALOG_RES * ) bBuffer )->bControls = ( short ) hb_parni( 1 );
   ( ( DIALOG_RES * ) bBuffer )->wLeft     = ( short ) hb_parnl( 3 );
   ( ( DIALOG_RES * ) bBuffer )->wTop      = ( short ) hb_parnl( 2 );
   ( ( DIALOG_RES * ) bBuffer )->wWidth    = ( short ) hb_parnl( 5 ) - ( short ) hb_parnl( 3 ) + 1;
   ( ( DIALOG_RES * ) bBuffer )->wHeight   = ( short ) hb_parnl( 4 ) - ( short ) hb_parnl( 2 ) + 1;
   ( ( DIALOG_RES * ) bBuffer )->lStyle    = hb_parnl( 7 );

   #ifndef UNICODE
   #ifdef __FLAT__
   if( ( ( DIALOG_RES * ) bBuffer )->lStyle == DS_SYSMODAL )
   {
      ( ( DIALOG_RES * ) bBuffer )->lStyle |= WS_POPUP;
      ( ( DIALOG_RES * ) bBuffer )->dwExtendedStyle = WS_EX_TRANSPARENT;
   }
   if( ( ( DIALOG_RES * ) bBuffer )->lStyle == WS_VISIBLE )  // XPP bug with LONGs
      ( ( DIALOG_RES * ) bBuffer )->lStyle = WS_POPUP | WS_CHILD;
   #endif
   #endif

   bBuffer[ wLen++ ] = 0;
   bBuffer[ wLen++ ] = 0;
   #ifdef __FLAT__
      #ifdef __BORLANDC__         // MSVC++ different alignment
         bBuffer[ wLen++ ] = 0;
         bBuffer[ wLen++ ] = 0;
      #endif
   #endif

   szText = ( char * ) hb_parc( 6 );

   #ifdef __FLAT__
      iLenUnicode = MultiByteToWideChar( CP_OEMCP, MB_PRECOMPOSED,
                     szText, -1, ( LPWSTR ) ( bBuffer + wLen ), 0 );
      MultiByteToWideChar( CP_OEMCP, MB_PRECOMPOSED, szText,
                   -1, ( LPWSTR ) ( bBuffer + wLen ), iLenUnicode );
      wLen += ( iLenUnicode * 2 );
     
      if( hb_pcount() == 7 ) // Align to DWORD boundary if no DS_SETFONT provided
      {
         ULONG l = ( ULONG ) wLen;
         l +=3;
         l >>=2;
         l <<=2;
         wLen = ( WORD ) l;
      }
     
      // font info
      if( hb_pcount() > 7 )
      {
         bBuffer[ wLen++ ] = LOBYTE( hb_parni( 8 ) );
         bBuffer[ wLen++ ] = HIBYTE( hb_parni( 8 ) );
         iLenUnicode = MultiByteToWideChar( CP_OEMCP, MB_PRECOMPOSED,
                       hb_parc( 9 ), -1, ( LPWSTR ) ( bBuffer + wLen ), 0 );
         MultiByteToWideChar( CP_OEMCP, MB_PRECOMPOSED, hb_parc( 9 ),
                              -1, ( LPWSTR ) ( bBuffer + wLen ), iLenUnicode );
         wLen += ( iLenUnicode * 2 );
         // Align to DWORD boundary
         {
             ULONG l = ( ULONG ) wLen;
           l +=3;
           l >>=2;
           l <<=2;
           wLen = ( WORD ) l;
         }
      }
   #else
      while( * szText )
         bBuffer[ wLen++ ] = * szText++;
      bBuffer[ wLen++ ] = 0;

      if( hb_pcount() > 7 )
      {
         bBuffer[ wLen++ ] = LOBYTE( hb_parni( 8 ) );
         bBuffer[ wLen++ ] = HIBYTE( hb_parni( 8 ) );
         szText = hb_parc( 9 );           // FontName
         while( * szText )
            bBuffer[ wLen++ ] = * szText++;
         bBuffer[ wLen++ ] = 0;
      }
   #endif

   // if( wLen == wSize )
   //    MessageBox( 0, "they are the same", "ok", 0 );                            

   hb_retclen( ( char * ) bBuffer, wLen );
   hb_xfree( bBuffer );
}
 
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41366
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: GPF con hb_out.log

Postby Antonio Linares » Tue Sep 24, 2013 5:15 pm

Ojo que este bug no esta relacionado con las cajas de diálogo de recursos :-(

Este código solo se usa cuando se crea una caja de diálogo desde código usando @ nRow, nCol ...
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41366
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: GPF con hb_out.log

Postby hmpaquito » Tue Sep 24, 2013 5:28 pm

Antonio,

Felicitarte, antes que nada, por haber cazado un bug de FiveWin que lleva muchooo tiempo con nosotros y que nadie habia visto aún :-) Muchisimas gracias!


Gracias por tus bonitas palabras... no sé... quizá a otros no les pase... pero a mi me motiva mucho el que la gente sea agradecida cuando lo unico que se pretende es ayudar :wink:

Gracias a ti por compartir la solución. Más adelante la probaré.

Un cordial saludo.
hmpaquito
 
Posts: 1482
Joined: Thu Oct 30, 2008 2:37 pm

Next

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 51 guests