consulta sobre Funciones de manejo de errores [c++]

Iniciado por xkiz ™, 7 Octubre 2011, 22:08 PM

0 Miembros y 1 Visitante están viendo este tema.

xkiz ™

hola gente, estoy realizando una aplicación, la cual me esta dando dolores de cabeza, osea en esta aplicación estoy usando MCISendString para manejar un stream web de una radio.
el problema es que normalmente la aplicación no crashea, pero aveces si y la verdad que no se que es lo que puede estar causando este crash, las veces que Debuguie no tuve errores, osea la aplicación puede llegar a funcionar 10 horas sin errores pero también creashearse al iniciar, y la verdad estoy re perdido.

Antes cuando programaba en VB6, tenia la forma de saber que numero de linea en X funcion que causaba el error, así podía fixearlo

pero ahora estoy programando en C++, VC++6.0 (WinApi) y la verdad estoy re perdido, osea yo creo que la causal del error puede ser el streamming , pero por ahí el error provenga de otro lado, y yo lo este pasando por alto.

Googleando un poco encontré en msdn Error Handling Functions pero la verdad es que no se bien como usar la mayor parte de las funciones que estan ahi o si alguna de esas funciones me servirán para lo que estoy tratando de averiguar, el origen de lo que cause el Crash de la aplicaron, o si alguien  sabe como averiguar esto, me serviría muchísimo...

LearningSpanishProgrammer

Debe buscar alguna cosa similar a el "Valgrind" o usar el Debugger

Son muy buenos para encontrar errores.
Estoy aprendiendo español, y tu estas aprendiendo programación

xkiz ™

el tema es que el 99% de las veces que inicie el programa en debug, no me tira ningún error, osea usar un debugger no me sirve de mucho. por eso lo que busco es alguna forma que me indique que fue lo que causo el error, onda try & catch.

yo me hice un debugger que me intercepta las llamadas a OutputDebuString, que es lo que uso como debugger para indicarme a mi mismo cosas dentro del programa en ejecución, pero el nunca pude interceptar Crash.


LearningSpanishProgrammer

No puede? Uso el debugger para eso todos los dias

El "debugger" tiene:
- Stack Trace
- Intercepta en el Signal (SIGINT, SIGERR...) (Crashs...)
- Valor de todas las variables

Creo que sea lo que quieres. Una imagen:

http://www.netburner.com/images/products/eclipse/eclipse_debugger_watch_counter.jpg
Estoy aprendiendo español, y tu estas aprendiendo programación

Eternal Idol

Podes instalar el WinDbg (EL depurador para Windows) y configurarlo para que sea el depurador post-mortem (ejecutandolo con -I) y de esa manera cuando el proceso muera se abrira el WinDbg y podras ver a que se debe exactamente.

Busca "Debugging tools for Windows" en Google.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

xkiz ™

#5
ok, voy a probar el depurador para windows y veo que pasa....
cuando el WinDbg capte el error lo publico, porque lo que estuve viendo no entiendo nada de lo que dice.

xkiz ™

perdon por el doble post, pero si no reposteo , este tema no va a aparecer como que hay info nueva.
efectivamente hoy me tiro el error que causa el Crash.
como no veo nada destacable en la info dada por el WinDbg, expongo todo lo que salio.



Microsoft (R) Windows Debugger Version 6.11.0001.404 AMD64
Copyright (c) Microsoft Corporation. All rights reserved.

*** wait with pending attach
Symbol search path is: *** Invalid ***
****************************************************************************
* Symbol loading may be unreliable without a symbol search path.           *
* Use .symfix to have the debugger choose a symbol path.                   *
* After setting your symbol path, use .reload to refresh symbol locations. *
****************************************************************************
Executable search path is:
ModLoad: 00000000`00400000 00000000`00431000   D:\Info_Local\User\Escritorio\iRadio.exe
ModLoad: 00000000`77820000 00000000`779c9000   C:\Windows\SYSTEM32\ntdll.dll
ModLoad: 00000000`77a00000 00000000`77b80000   ntdll.dll
ModLoad: 00000000`75090000 00000000`750cf000   C:\Windows\SYSTEM32\wow64.dll
ModLoad: 00000000`75030000 00000000`7508c000   C:\Windows\SYSTEM32\wow64win.dll
ModLoad: 00000000`75020000 00000000`75028000   C:\Windows\SYSTEM32\wow64cpu.dll
ModLoad: 00000000`77030000 00000000`77140000   KERNEL32.dll
ModLoad: 00000000`769f0000 00000000`76a36000   KERNELBASE.dll
ModLoad: 00000000`76720000 00000000`76820000   USER32.dll
ModLoad: 00000000`76ed0000 00000000`76f60000   GDI32.dll
ModLoad: 00000000`779d0000 00000000`779da000   LPK.dll
ModLoad: 00000000`76f60000 00000000`76ffd000   USP10.dll
ModLoad: 00000000`76630000 00000000`766dc000   msvcrt.dll
ModLoad: 00000000`76820000 00000000`768c0000   ADVAPI32.dll
ModLoad: 00000000`76400000 00000000`76419000   SECHOST.dll
ModLoad: 00000000`76540000 00000000`76630000   RPCRT4.dll
ModLoad: 00000000`750f0000 00000000`75150000   SspiCli.dll
ModLoad: 00000000`750e0000 00000000`750ec000   CRYPTBASE.dll
ModLoad: 00000000`757b0000 00000000`763fa000   SHELL32.dll
ModLoad: 00000000`76c60000 00000000`76cb7000   SHLWAPI.dll
ModLoad: 00000000`72db0000 00000000`72f4e000   COMCTL32.dll
ModLoad: 00000000`733a0000 00000000`733d2000   WINMM.dll
ModLoad: 00000000`75270000 00000000`752d0000   IMM32.dll
ModLoad: 00000000`768c0000 00000000`7698c000   MSCTF.dll
ModLoad: 00000000`72d30000 00000000`72db0000   UxTheme.dll
ModLoad: 00000000`74a20000 00000000`74a33000   dwmapi.dll
ModLoad: 00000000`75360000 00000000`754bc000   ole32.dll
ModLoad: 00000000`6fb10000 00000000`6fb49000   MMDevAPI.DLL
ModLoad: 00000000`73f50000 00000000`74045000   PROPSYS.dll
ModLoad: 00000000`752d0000 00000000`7535f000   OLEAUT32.dll
ModLoad: 00000000`6fa40000 00000000`6fa70000   WINMMDRV.dll
ModLoad: 00000000`6fa80000 00000000`6fa84000   ksuser.dll
ModLoad: 00000000`6fbb0000 00000000`6fbb7000   AVRT.dll
ModLoad: 00000000`76cc0000 00000000`76e5d000   SETUPAPI.dll
ModLoad: 00000000`77000000 00000000`77027000   CFGMGR32.dll
ModLoad: 00000000`76be0000 00000000`76bf2000   DEVOBJ.dll
ModLoad: 00000000`6fa90000 00000000`6fac6000   AudioSes.DLL
ModLoad: 00000000`6fa70000 00000000`6fa78000   MSACM32.DRV
ModLoad: 00000000`73f30000 00000000`73f44000   MSACM32.dll
ModLoad: 00000000`6fa20000 00000000`6fa27000   MIDIMAP.dll
ModLoad: 00000000`6fa00000 00000000`6fa0c000   MCIQTZ32.dll
ModLoad: 00000000`6e560000 00000000`6e6d7000   QUARTZ.dll
ModLoad: 00000000`75680000 00000000`75703000   CLBCatQ.DLL
ModLoad: 00000000`6f8d0000 00000000`6f905000   QASF.dll
ModLoad: 00000000`6fad0000 00000000`6fadb000   msdmo.dll
ModLoad: 00000000`6efc0000 00000000`6f227000   WMVCore.DLL
ModLoad: 00000000`6ef80000 00000000`6efbd000   WMASF.DLL
ModLoad: 00000000`744e0000 00000000`74670000   gdiplus.dll
ModLoad: 00000000`74190000 00000000`741be000   MLANG.dll
ModLoad: 00000000`75150000 00000000`7526a000   WININET.dll
ModLoad: 00000000`76e60000 00000000`76e63000   Normaliz.dll
ModLoad: 00000000`754c0000 00000000`75676000   iertutil.dll
ModLoad: 00000000`76a40000 00000000`76b50000   urlmon.dll
ModLoad: 00000000`74440000 00000000`74448000   Secur32.dll
ModLoad: 00000000`73680000 00000000`7368b000   profapi.dll
ModLoad: 00000000`766e0000 00000000`76715000   WS2_32.dll
ModLoad: 00000000`76bd0000 00000000`76bd6000   NSI.dll
ModLoad: 00000000`74dc0000 00000000`74e04000   DNSAPI.dll
ModLoad: 00000000`74d50000 00000000`74d6c000   IPHLPAPI.DLL
ModLoad: 00000000`74d40000 00000000`74d47000   WINNSI.DLL
ModLoad: 00000000`74b50000 00000000`74b66000   CRYPTSP.dll
ModLoad: 00000000`74b10000 00000000`74b4b000   RSAENH.dll
ModLoad: 00000000`734c0000 00000000`734ce000   RpcRtRemote.dll
ModLoad: 00000000`71a90000 00000000`723d5000   IEFRAME.dll
ModLoad: 00000000`75710000 00000000`75715000   PSAPI.DLL
ModLoad: 00000000`73ea0000 00000000`73edc000   OLEACC.dll
ModLoad: 00000000`6f910000 00000000`6f942000   SWEEPRX.dll
ModLoad: 00000000`6e760000 00000000`6e85c000   WMNetMgr.DLL
ModLoad: 00000000`731d0000 00000000`731d8000   CREDSSP.dll
ModLoad: 00000000`6f880000 00000000`6f8c2000   msv1_0.dll
ModLoad: 00000000`6ec80000 00000000`6ec91000   cryptdll.dll
ModLoad: 00000000`6ec50000 00000000`6ec7c000   wdigest.dll
ModLoad: 00000000`73590000 00000000`735e8000   WINHTTP.dll
ModLoad: 00000000`73540000 00000000`7358f000   webio.dll
ModLoad: 00000000`74b90000 00000000`74be2000   RASAPI32.dll
ModLoad: 00000000`74b70000 00000000`74b85000   rasman.dll
ModLoad: 00000000`743b0000 00000000`743bd000   rtutils.dll
ModLoad: 00000000`744d0000 00000000`744d6000   SensApi.dll
ModLoad: 00000000`6f240000 00000000`6f29a000   netprofm.dll
ModLoad: 00000000`74e80000 00000000`74e90000   nlaapi.dll
ModLoad: 00000000`6f230000 00000000`6f238000   npmproxy.dll
ModLoad: 00000000`74e10000 00000000`74e4c000   MSWSOCK.dll
ModLoad: 00000000`73630000 00000000`73635000   WSHTCPIP.dll
ModLoad: 00000000`74cb0000 00000000`74cb6000   WSHIP6.dll
ModLoad: 00000000`74d80000 00000000`74da7000   WLIDNSP.dll
ModLoad: 00000000`74cc0000 00000000`74cc6000   rasadhlp.dll
ModLoad: 00000000`74cd0000 00000000`74d08000   fwpuclnt.dll
ModLoad: 00000000`74d30000 00000000`74d3d000   dhcpcsvc6.DLL
ModLoad: 00000000`74d10000 00000000`74d22000   dhcpcsvc.DLL
ModLoad: 00000000`6ec30000 00000000`6ec44000   DEVENUM.DLL
ModLoad: 00000000`6e710000 00000000`6e752000   DSHOWRDPFILTER.DLL
ModLoad: 00000000`74ec0000 00000000`74ecd000   WTSAPI32.dll
ModLoad: 00000000`74410000 00000000`74439000   WINSTA.dll
ModLoad: 00000000`6eb20000 00000000`6eb2a000   slc.dll
ModLoad: 00000000`10000000 00000000`10877000   ffdshow.ax
ModLoad: 00000000`76b50000 00000000`76bcb000   COMDLG32.dll
ModLoad: 00000000`6e6e0000 00000000`6e705000   DINPUT.dll
ModLoad: 00000000`6c470000 00000000`6c633000   d3d9.dll
ModLoad: 00000000`74ed0000 00000000`74ed9000   VERSION.dll
ModLoad: 00000000`6fa10000 00000000`6fa16000   d3d8thk.dll
ModLoad: 00000000`6cc50000 00000000`6cd30000   WMADMOD.dll
ModLoad: 00000000`6cdc0000 00000000`6ce19000   MFPlat.DLL
ModLoad: 00000000`6e490000 00000000`6e557000   ac3filter.ax
ModLoad: 00000000`6e1f0000 00000000`6e2ef000   ac3filter_intl.dll
ModLoad: 00000000`06c50000 00000000`06d4b000   VSFilter.dll
ModLoad: 00000000`73300000 00000000`73351000   WINSPOOL.DRV
ModLoad: 00000000`6cd30000 00000000`6cda2000   DSOUND.dll
ModLoad: 00000000`6fb50000 00000000`6fb75000   POWRPROF.dll
(414.55c): Access violation - code c0000005 (!!! second chance !!!)
*** WARNING: Unable to verify checksum for D:\Info_Local\User\Escritorio\iRadio.exe
*** ERROR: Module load completed but symbols could not be loaded for D:\Info_Local\User\Escritorio\iRadio.exe
iRadio+0x5540:
00405540 894c11fc        mov     dword ptr [ecx+edx-4],ecx ds:002b:305f45f8=????????


hoy lo único que saque en limpio es que el stream no es la causa, por que el programa se crasheo antes de las 08:00 y yo me levante a las 08:30 y el programa seguía reproduciendo el stream

Eternal Idol

Tenes que configurar los simbolos, hace CTRL + S y agrega:

srv*C:\Symbols*http://msdl.microsoft.com/download/symbols;c:\pathdonde\este\elpdb\detu\programa

Despues podes hacer .reload y kb ffff para ver la pila y saber que llamadas se hicieron hasta llegar a donde se produce la excepcion que es por acceder a memoria invalida (un puntero erroneo muy probablemente).
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

xkiz ™

yo usaba el exe de Release, no el de Debug, por ende no tenia el .pdb . Ahora  a ver si entendí bien.

tengo que tener seteado el proyecto en Debug, compilar y ejecutar el iRadio.exe del Debug, cuando la app crashee, y se abra el WinDbg, [Ctrl] + [ S ] y en Symbol search path pegar srv*C:\Symbols*http://msdl.microsoft.com/download/symbols;D:\Info_Local\User\Escritorio\Radio\Debug\iRadio.pdb
y tildar Reload y darle a Ok?

Eternal Idol

Sin el iRadio.pdb, es un path (la version de Release tambien deberia tener .PDB). Yo te habia dicho de usar el comando .reload pero esa opcion de tildar tambien es valida.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón