Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

(VS 2005) Kako to stack trace-a kada se program crash-uje?

[es] :: C/C++ programiranje :: (VS 2005) Kako to stack trace-a kada se program crash-uje?

[ Pregleda: 2858 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

alexione
Aleksa Todorovic
Sremski Karlovci

Član broj: 46927
Poruke: 29
*.ADSL.neobee.net.



Profil

icon (VS 2005) Kako to stack trace-a kada se program crash-uje?07.03.2007. u 10:56 - pre 208 meseci
Koristim Visual Studio 2005, i program se pri testiranju povremeno crash-uje, tester jos nije uspeo da otkrije tacan nacin za reprodukovanje problema. Na koji nacin mogu pri crash-u programa da dobijem stack trace, tj. informacije koje su mi izlistane u Call Stack-u? Hvatanje izuzetka je vec postavljeno, ono sto mi treba je nacin da iz LPEXCEPTION_POINTERS dobijem stack trace. Da li se neko vec bavio ovim problemom? Postoji li u bibliotekama za C++ koje se dobijaju uz VS gotovo resenje?

Hvala unapred!
 
Odgovor na temu

tosa
上海, 中国

Član broj: 1811
Poruke: 1342
..w.sh.dynamic.163data.com.cn.

ICQ: 14293955
Sajt: https://github.com/milost..


+48 Profil

icon Re: (VS 2005) Kako to stack trace-a kada se program crash-uje?09.03.2007. u 12:33 - pre 208 meseci
Preuzeto iz MSND-a:
Code:
#include <dbghelp.h>
#include <shellapi.h>
#include <shlobj.h>

int GenerateDump(EXCEPTION_POINTERS* pExceptionPointers)
{
    BOOL bMiniDumpSuccessful;
    WCHAR szPath[MAX_PATH]; 
    WCHAR szFileName[MAX_PATH]; 
    WCHAR* szAppName = L"AppName";
    WCHAR* szVersion = L"v1.0";
    DWORD dwBufferSize = MAX_PATH;
    HANDLE hDumpFile;
    SYSTEMTIME stLocalTime;
    MINIDUMP_EXCEPTION_INFORMATION ExpParam;

    GetLocalTime( &stLocalTime );
    GetTempPath( dwBufferSize, szPath );

    StringCchPrintf( szFileName, MAX_PATH, L"%s%s", szPath, szAppName );
    CreateDirectory( szFileName, NULL );

    StringCchPrintf( szFileName, MAX_PATH, L"%s%s\\%s-%04d%02d%02d-%02d%02d%02d-%ld-%ld.dmp", 
               szPath, szAppName, szVersion, 
               stLocalTime.wYear, stLocalTime.wMonth, stLocalTime.wDay, 
               stLocalTime.wHour, stLocalTime.wMinute, stLocalTime.wSecond, 
               GetCurrentProcessId(), GetCurrentThreadId());
    hDumpFile = CreateFile(szFileName, GENERIC_READ|GENERIC_WRITE, 
                FILE_SHARE_WRITE|FILE_SHARE_READ, 0, CREATE_ALWAYS, 0, 0);

    ExpParam.ThreadId = GetCurrentThreadId();
    ExpParam.ExceptionPointers = pExceptionPointers;
    ExpParam.ClientPointers = TRUE;

    bMiniDumpSuccessful = MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), 
                    hDumpFile, MiniDumpWithDataSegs, &ExpParam, NULL, NULL);

    return EXCEPTION_EXECUTE_HANDLER;
}


void SomeFunction()
{
    __try
    {
        int *pBadPtr = NULL;
        *pBadPtr = 0;
    }
    __except(GenerateDump(GetExceptionInformation()))
    {
    }
}
 
Odgovor na temu

alexione
Aleksa Todorovic
Sremski Karlovci

Član broj: 46927
Poruke: 29
*.DIALUP-SMIN.neobee.net.



Profil

icon Re: (VS 2005) Kako to stack trace-a kada se program crash-uje?10.03.2007. u 14:06 - pre 208 meseci
Hvala, upravo to mi je trebalo. Inace, uspeo sam da nadjem resenje u medjuvremenu na http://www.codeproject.com/threads/StackWalker.asp
 
Odgovor na temu

tosa
上海, 中国

Član broj: 1811
Poruke: 1342
..w.sh.dynamic.163data.com.cn.

ICQ: 14293955
Sajt: https://github.com/milost..


+48 Profil

icon Re: (VS 2005) Kako to stack trace-a kada se program crash-uje?10.03.2007. u 15:16 - pre 208 meseci
Mislim da ti to neće ni izbliza pokriti potrebe. Stack walker je odličan u sutuacijama
u kojima možeš da predvidiš pucanje programa, kao što je assert uslov koji nije prošao.
Pod uslovom da ne koristiš exception handlere.


[Ovu poruku je menjao tosa dana 11.03.2007. u 04:35 GMT+1]
 
Odgovor na temu

alexione
Aleksa Todorovic
Sremski Karlovci

Član broj: 46927
Poruke: 29
*.DIALUP-SMIN.neobee.net.



Profil

icon Re: (VS 2005) Kako to stack trace-a kada se program crash-uje?10.03.2007. u 22:23 - pre 208 meseci
Da, na asser-ima se StackWalker super pokazao. Probao sam ga, i radi posao i za integer-division-by-zero, null-pointer-access, pa pretpostavljam da ce dobro raditi i za ostale bad-pointer-access.
 
Odgovor na temu

tosa
上海, 中国

Član broj: 1811
Poruke: 1342
..w.sh.dynamic.163data.com.cn.

ICQ: 14293955
Sajt: https://github.com/milost..


+48 Profil

icon Re: (VS 2005) Kako to stack trace-a kada se program crash-uje?11.03.2007. u 03:28 - pre 208 meseci
Pokriće ti praktično sve potrebe ako razvoj radiš individualno.
Ukoliko imaš ljude koji testiraju tvoju aplikaciju, mnogo je bolje da imaš i kreš
damp, zato što možeš da debaguješ problem koji se desio na tuđoj mašini, nećeš
imati samo informacije o mestu pucanja već i kompletno stanje programa u trenutku
kada se to desilo. Sve prema potrebama...

 
Odgovor na temu

[es] :: C/C++ programiranje :: (VS 2005) Kako to stack trace-a kada se program crash-uje?

[ Pregleda: 2858 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.