Бестолковый .dmp
От: Kingofastellarwar Украина  
Дата: 10.11.09 13:05
Оценка: :)
Генерирую в релизе у юзеров в случае ошибки минидам через MiniDumpWriteDump и отправляю его себе для анализа

Но от полученых дампов толку мало, как минимум потому что стек не показывается по человечески.

Какие условия нужны чтобы таки его нормально посмтореть кроме того что нужно хранить у себя pdb`шники?
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Re: Бестолковый .dmp
От: alexei_s  
Дата: 10.11.09 19:01
Оценка:
Исходники, соответствующие тем pdb.
Удобно настроить для этих целей поддержку символьного сервера (на базе svn например)
Re[2]: Бестолковый .dmp
От: Kingofastellarwar Украина  
Дата: 10.11.09 19:53
Оценка:
Здравствуйте, alexei_s, Вы писали:

_>Исходники, соответствующие тем pdb.

_>Удобно настроить для этих целей поддержку символьного сервера (на базе svn например)


Дык есть же ж, и по тому же пути, я заметил что тот хлам который в IntDir складывается как-то помогает правильно разруливать дмп.

А как символьный сервер делается? я просто с каждым релизом пдб сохранияю в свн и всё.
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Re: Бестолковый .dmp
От: zaufi Земля  
Дата: 10.11.09 20:02
Оценка: -5
Здравствуйте, Kingofastellarwar, Вы писали:

K>Генерирую в релизе у юзеров в случае ошибки минидам через MiniDumpWriteDump и отправляю его себе для анализа

минидамы эта пять! -- может в проге еще и миниблэкджек гдета есть?
Re[3]: Бестолковый .dmp
От: alexei_s  
Дата: 11.11.09 04:00
Оценка:
K>А как символьный сервер делается? я просто с каждым релизом пдб сохранияю в свн и всё.

http://support.microsoft.com/kb/311503
Re: Бестолковый .dmp
От: x905  
Дата: 11.11.09 05:39
Оценка:
Здравствуйте, Kingofastellarwar, Вы писали:

K>Генерирую в релизе у юзеров в случае ошибки минидам через MiniDumpWriteDump и отправляю его себе для анализа


а почему бы не вести лог работы в файл — сразу ясно где упало
Re: Бестолковый .dmp
От: Feonyf  
Дата: 11.11.09 20:40
Оценка:
Здравствуйте, Kingofastellarwar, Вы писали:

K>Какие условия нужны чтобы таки его нормально посмтореть кроме того что нужно хранить у себя pdb`шники?


Прежде всего нужно чтобы pdb собирались правильно во время компиляции/линковки. Для этого у VisualStudio 2008 нужно указать следующие ключи:
для компилятора: /Zi (Debug information format: Program Database)
для линковщика: /DEBUG (generate debug info: YES)
Моя строка построения буста:
.\bjam link=static threading=multi runtime-link=static -j %NUMBER_OF_PROCESSORS% --with-filesystem --with-thread --with-date_time address-model=64
Re: Бестолковый .dmp
От: ononim  
Дата: 11.11.09 20:45
Оценка:
K>Генерирую в релизе у юзеров в случае ошибки минидам через MiniDumpWriteDump и отправляю его себе для анализа
K>Но от полученых дампов толку мало, как минимум потому что стек не показывается по человечески.
K>Какие условия нужны чтобы таки его нормально посмтореть кроме того что нужно хранить у себя pdb`шники?
Во первых — чтобы сразу увидеть стек нужно в MiniDumpWriteDump передать exception context (параметр ExceptionParam)
Если вы крэш ловите в unhandled exception filter — вся нужная для этого информация к вам приходит в ExceptionInfo
ну и + thread id — GetCurrentThreadId. Если корректно снимете дамп с exception information то для того чтобы переключиться на exception context в windbg достаточно набрать команду ".ecxr"
Но на самом деле проявив немного смекалки можно вытащить exception context, даже если он не был сохранен с дампом, но дамп должен быть не mini в таком случае потому я подробно рассказывать как это сделать не стану ибо долго кнопочки жать придется.
Как много веселых ребят, и все делают велосипед...
Re[2]: Бестолковый .dmp
От: Kingofastellarwar Украина  
Дата: 11.11.09 21:13
Оценка:
Здравствуйте, Feonyf, Вы писали:

F>Здравствуйте, Kingofastellarwar, Вы писали:


K>>Какие условия нужны чтобы таки его нормально посмтореть кроме того что нужно хранить у себя pdb`шники?


F>Прежде всего нужно чтобы pdb собирались правильно во время компиляции/линковки. Для этого у VisualStudio 2008 нужно указать следующие ключи:

F>для компилятора: /Zi (Debug information format: Program Database)
F>для линковщика: /DEBUG (generate debug info: YES)

Всё это есть и было.
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Re[2]: Бестолковый .dmp
От: Kingofastellarwar Украина  
Дата: 11.11.09 21:14
Оценка:
Здравствуйте, ononim, Вы писали:

K>>Генерирую в релизе у юзеров в случае ошибки минидам через MiniDumpWriteDump и отправляю его себе для анализа

K>>Но от полученых дампов толку мало, как минимум потому что стек не показывается по человечески.
K>>Какие условия нужны чтобы таки его нормально посмтореть кроме того что нужно хранить у себя pdb`шники?
O>Во первых — чтобы сразу увидеть стек нужно в MiniDumpWriteDump передать exception context (параметр ExceptionParam)
O>Если вы крэш ловите в unhandled exception filter — вся нужная для этого информация к вам приходит в ExceptionInfo
O> ну и + thread id — GetCurrentThreadId. Если корректно снимете дамп с exception information то для того чтобы переключиться на exception context в windbg достаточно набрать команду ".ecxr"
O>Но на самом деле проявив немного смекалки можно вытащить exception context, даже если он не был сохранен с дампом, но дамп должен быть не mini в таком случае потому я подробно рассказывать как это сделать не стану ибо долго кнопочки жать придется.

ну хоть ссылку дайте где почитать про генерацию полных дампов или как их
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Re[3]: Бестолковый .dmp
От: ononim  
Дата: 11.11.09 21:33
Оценка:
K>ну хоть ссылку дайте где почитать про генерацию полных дампов или как их
сделайте exeption information
full memory dump это из другой оперы и контролируется флагами в MiniDumpWriteDump
Как много веселых ребят, и все делают велосипед...
Re[4]: Бестолковый .dmp
От: Kingofastellarwar Украина  
Дата: 11.11.09 21:44
Оценка:
Здравствуйте, ononim, Вы писали:

K>>ну хоть ссылку дайте где почитать про генерацию полных дампов или как их

O>сделайте exeption information
O>full memory dump это из другой оперы и контролируется флагами в MiniDumpWriteDump

А если я делаю дамп не в результате отлова необработаного исключения? у меня есть и то и другое
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Re[4]: Бестолковый .dmp
От: Kingofastellarwar Украина  
Дата: 11.11.09 21:56
Оценка:
Здравствуйте, ononim, Вы писали:

K>>ну хоть ссылку дайте где почитать про генерацию полных дампов или как их

O>сделайте exeption information
O>full memory dump это из другой оперы и контролируется флагами в MiniDumpWriteDump

А, как контекст получить я понял.

Но дело в том что моя ловушка необработаных исключений получает валидный PEXCEPTION_POINTERS, но всё равно стек не показывает по-нормалному
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Re[5]: Бестолковый .dmp
От: ononim  
Дата: 11.11.09 22:02
Оценка:
K>>>ну хоть ссылку дайте где почитать про генерацию полных дампов или как их
O>>сделайте exeption information
O>>full memory dump это из другой оперы и контролируется флагами в MiniDumpWriteDump
K>А, как контекст получить я понял.
K>Но дело в том что моя ловушка необработаных исключений получает валидный PEXCEPTION_POINTERS, но всё равно стек не показывает по-нормалному
А она у вас _передает_ его правильно в MiniDumpWriteDump? код в студию
Как много веселых ребят, и все делают велосипед...
Re[5]: Бестолковый .dmp
От: ononim  
Дата: 11.11.09 22:02
Оценка:
K>>>ну хоть ссылку дайте где почитать про генерацию полных дампов или как их
O>>сделайте exeption information
O>>full memory dump это из другой оперы и контролируется флагами в MiniDumpWriteDump
K>А если я делаю дамп не в результате отлова необработаного исключения? у меня есть и то и другое
ну если у вас дамп "просто так" то и стеки у вас будут "просто так"
~*kv и любуйтесь
Как много веселых ребят, и все делают велосипед...
Re[6]: Бестолковый .dmp
От: Kingofastellarwar Украина  
Дата: 11.11.09 22:30
Оценка:
Здравствуйте, ononim, Вы писали:

K>>>>ну хоть ссылку дайте где почитать про генерацию полных дампов или как их

O>>>сделайте exeption information
O>>>full memory dump это из другой оперы и контролируется флагами в MiniDumpWriteDump
K>>А, как контекст получить я понял.
K>>Но дело в том что моя ловушка необработаных исключений получает валидный PEXCEPTION_POINTERS, но всё равно стек не показывает по-нормалному
O>А она у вас _передает_ его правильно в MiniDumpWriteDump? код в студию



void main()
{
    __try
    {
        //...
    }
    __except(RecordExceptionInfo(GetExceptionInformation(), L"WinMain"))
    {

    }
}

int RecordExceptionInfo(PEXCEPTION_POINTERS pExceptPtrs, LPCTSTR lpszMessage)
{
    static bool bFirstTime = true;
        
    #ifdef _DEBUG
        return EXCEPTION_CONTINUE_SEARCH;
    #endif
    
    if(IsDebuggerPresent())
    {
        return EXCEPTION_CONTINUE_SEARCH;
    }
    else
    {    
        if (!bFirstTime)    // Going recursive! That must mean this routine crashed!
            return EXCEPTION_CONTINUE_SEARCH;
        
        bFirstTime = false;
        //...
        CreateMiniDump(/*хендл на dmp файл*/, pExceptPtrs)
        //..
    }
}

void CreateMiniDump(HANDLE hFile, PEXCEPTION_POINTERS excpInfo)
{
    if (excpInfo == null) 
    {
        // Generate exception to get proper context in dump
        __try 
        {
            RaiseException(EXCEPTION_BREAKPOINT, 0, 0, null);
        } 
        __except(CreateMiniDump(hFile, GetExceptionInformation()), EXCEPTION_CONTINUE_EXECUTION) 
        {
        }
    } 
    else
    {
        MINIDUMP_EXCEPTION_INFORMATION eInfo;
        eInfo.ThreadId        = GetCurrentThreadId();
        eInfo.ExceptionPointers = excpInfo;
        eInfo.ClientPointers    = FALSE;
    
        MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hFile, MiniDumpNormal, excpInfo ? &eInfo : null, null, null);
    }
}
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Re: Бестолковый .dmp
От: Alexander G Украина  
Дата: 11.11.09 23:06
Оценка:
Здравствуйте, Kingofastellarwar, Вы писали:

K>Генерирую в релизе у юзеров в случае ошибки минидам через MiniDumpWriteDump и отправляю его себе для анализа


K>Но от полученых дампов толку мало, как минимум потому что стек не показывается по человечески.


K>Какие условия нужны чтобы таки его нормально посмтореть кроме того что нужно хранить у себя pdb`шники?


В windbg и студии так же?
Студия/windbg говорят, что .pdb загрузилась?
Если стек в виндовых дллках, сервер символов майкрософт прописан?
Если свой стек, не заинлайнилось ли всё подряд?
Русский военный корабль идёт ко дну!
Re[7]: Бестолковый .dmp
От: ononim  
Дата: 11.11.09 23:41
Оценка:
ну дык все крута
вот ваш ко слегка адаптированный чтобы компилялся:
// dumptest.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "windows.h"
#include "dbghelp.h"

int RecordExceptionInfo(PEXCEPTION_POINTERS pExceptPtrs, LPCTSTR lpszMessage);
void CreateMiniDump(PEXCEPTION_POINTERS excpInfo);

void main()
{
    __try
    {
        __asm int 3;
    }
    __except(RecordExceptionInfo(GetExceptionInformation(), "WinMain"))
    {
        
    }
}

int RecordExceptionInfo(PEXCEPTION_POINTERS pExceptPtrs, LPCTSTR lpszMessage)
{
    static bool bFirstTime = true;
    
#ifdef _DEBUG
    return EXCEPTION_CONTINUE_SEARCH;
#endif
    
    if(IsDebuggerPresent())
    {
        return EXCEPTION_CONTINUE_SEARCH;
    }
    else
    {    
        if (!bFirstTime)    // Going recursive! That must mean this routine crashed!
            return EXCEPTION_CONTINUE_SEARCH;
        
        bFirstTime = false;
        CreateMiniDump(pExceptPtrs);
    }
}

void CreateMiniDump(PEXCEPTION_POINTERS excpInfo)
{
    if (excpInfo == 0) 
    {
        // Generate exception to get proper context in dump
        __try 
        {
            RaiseException(EXCEPTION_BREAKPOINT, 0, 0, 0);
        } 
        __except(CreateMiniDump(GetExceptionInformation()), EXCEPTION_CONTINUE_EXECUTION) 
        {
        }
    } 
    else
    {
        MINIDUMP_EXCEPTION_INFORMATION eInfo;
        eInfo.ThreadId        = GetCurrentThreadId();
        eInfo.ExceptionPointers = excpInfo;
        eInfo.ClientPointers    = FALSE;
        
        HANDLE hFile = ::CreateFile("c:\\dump.dmp", GENERIC_ALL, 0, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
        MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hFile, MiniDumpNormal, excpInfo ? &eInfo : 0, 0, 0);
        ::CloseHandle(hFile);
    }
}



а вот лог сессии windbg:

Loading Dump File [C:\dump.dmp]
User Mini Dump File: Only registers, stack and portions of memory are available

Symbol search path is: srv*
Executable search path is:
Windows Server 2003 Version 3790 (Service Pack 2) MP (2 procs) Free x86 compatible
Product: Server, suite: Enterprise TerminalServer SingleUserTS
Machine Name:
Debug session time: Thu Nov 12 01:37:43.000 2009 (GMT+2)
System Uptime: not available
Process Uptime: not available
..........
This dump file has a breakpoint exception stored in it.
The stored exception information can be accessed via .ecxr.
eax=00350000 ebx=001453d8 ecx=00000205 edx=7c82860c esi=001453b0 edi=00145408
eip=7c82860c esp=0012f2ac ebp=0012f2bc iopl=0 nv up ei pl zr na pe nc
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000246
ntdll!KiFastSystemCallRet:
7c82860c c3 ret
0:000> .ecxr
eax=0012ffb0 ebx=7ffdb000 ecx=00340758 edx=00340000 esi=00000000 edi=00000000
eip=0040102d esp=0012ff5c ebp=0012ff80 iopl=0 nv up ei pl nz ac po nc
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000212
*** WARNING: Unable to verify checksum for dumptest.exe
dumptest!main+0x2d:
0040102d cc int 3
0:000> kv
*** Stack trace for last set context — .thread/.cxr resets it
ChildEBP RetAddr Args to Child
0012ff80 00401434 00000001 00340f40 00340fa8 dumptest!main+0x2d (CONV: cdecl) [E:\Program Files\Microsoft Visual Studio\VC98\MyProjects\dumptest\dumptest.cpp @ 15]
0012ffc0 77e6f23b 00000000 00000000 7ffdb000 dumptest!mainCRTStartup+0xb4
0012fff0 00000000 00401380 00000000 00000000 kernel32!BaseProcessStart+0x23 (FPO: [SEH])

Как много веселых ребят, и все делают велосипед...
Re[8]: Бестолковый .dmp
От: Kingofastellarwar Украина  
Дата: 12.11.09 09:39
Оценка:
Здравствуйте, ononim, Вы писали:

O>ну дык все крута


Так дело в том что дампы созданые на моей тачке (XP x64 sp2) смотрятся отлично, а вот те которые приходят от юзерей — нет.
Может причина в том что они запускали прогу на 32битной системе?
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Re[9]: Бестолковый .dmp
От: ononim  
Дата: 12.11.09 09:51
Оценка:
O>>ну дык все крута
K>Так дело в том что дампы созданые на моей тачке (XP x64 sp2) смотрятся отлично, а вот те которые приходят от юзерей — нет.
K>Может причина в том что они запускали прогу на 32битной системе?
что значит 'нет'?
покажите лог windbg
Как много веселых ребят, и все делают велосипед...
Re: Бестолковый .dmp
От: Аноним  
Дата: 12.11.09 13:57
Оценка:
Здравствуйте, Kingofastellarwar, Вы писали:

K>Генерирую в релизе у юзеров в случае ошибки минидам через MiniDumpWriteDump и отправляю его себе для анализа


K>Но от полученых дампов толку мало, как минимум потому что стек не показывается по человечески.


K>Какие условия нужны чтобы таки его нормально посмтореть кроме того что нужно хранить у себя pdb`шники?

А у меня такой глупый вопрос?

Допустим, у меня есть код и получен бинарник из него, и соответсвенно pdb. Я гружу дамп студией, call stack и прочее показывает отлично.
Но если я перебилжу проект, НЕ поменяв код, то call stack и прочее уже не показывает (показывает какую-то чушь). Можно ли как-то сделать, чтобы показывала?
Re[4]: Бестолковый .dmp
От: trophim Россия  
Дата: 12.11.09 19:40
Оценка:
А из СВН исходники надо самому вытягивать требуемой ревизии или как? Т.е. вот пришел мне минидамп, грузим его в отладчик: симболсы мне выдаст символьный сервер, а исходники из СВН, которые соответствуют данному релизу, вручную надо забрать?
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Let it be! — Давайте есть пчелу!
Re[2]: Бестолковый .dmp
От: Alexander G Украина  
Дата: 12.11.09 20:45
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Допустим, у меня есть код и получен бинарник из него, и соответсвенно pdb. Я гружу дамп студией, call stack и прочее показывает отлично.

А>Но если я перебилжу проект, НЕ поменяв код, то call stack и прочее уже не показывает (показывает какую-то чушь). Можно ли как-то сделать, чтобы показывала?

Бинарник и .pdb должны быть результатом того же билда, именно этот билд должен быть подписан и выдан пользователям и сохранён на своём сервере символов, чтобы при получении дампа дебаггер мог автоматически найти именно тот бинарник, который сошлётся на именно тот .pdb.

Ниже — как можно попытаться сделать воркэраунд на случаи, которых быть не должно.



http://www.debuginfo.com/tools/chkmatch.html — это если .dmp соответствует exe, но .pdb от другого .exe/.dll, чтобы пропатчить .pdb

Если .pdb соответствует .exe/.dll, но .dmp от другого .dll/.exe, будет различаться время линковки и чексумма. см. структуру MINIDUMP_MODULE в минидампе и соответствующие поля заголовка. Пропатчить проще минидамп, т.к. при патчинге .exe/.dll .pdb файл перестанет подходить.
Русский военный корабль идёт ко дну!
Re[3]: Бестолковый .dmp
От: Аноним  
Дата: 13.11.09 11:59
Оценка:
Здравствуйте, Alexander G, Вы писали:

AG>Здравствуйте, Аноним, Вы писали:


А>>Допустим, у меня есть код и получен бинарник из него, и соответсвенно pdb. Я гружу дамп студией, call stack и прочее показывает отлично.

А>>Но если я перебилжу проект, НЕ поменяв код, то call stack и прочее уже не показывает (показывает какую-то чушь). Можно ли как-то сделать, чтобы показывала?

AG>Бинарник и .pdb должны быть результатом того же билда, именно этот билд должен быть подписан и выдан пользователям и сохранён на своём сервере символов, чтобы при получении дампа дебаггер мог автоматически найти именно тот бинарник, который сошлётся на именно тот .pdb.


AG>Ниже — как можно попытаться сделать воркэраунд на случаи, которых быть не должно.


AG>

AG>http://www.debuginfo.com/tools/chkmatch.html — это если .dmp соответствует exe, но .pdb от другого .exe/.dll, чтобы пропатчить .pdb

AG>Если .pdb соответствует .exe/.dll, но .dmp от другого .dll/.exe, будет различаться время линковки и чексумма. см. структуру MINIDUMP_MODULE в минидампе и соответствующие поля заголовка. Пропатчить проще минидамп, т.к. при патчинге .exe/.dll .pdb файл перестанет подходить.

Спасибо, Александр.
Просто, как то глупо хранить у себя pdb-ник (которые и весят не кисло), если в любой момент можно вытащить тот же код из сорссейфа. Ну в общем, смысл ответа я понял, это так, лирическое отступление.
Re[4]: Бестолковый .dmp
От: Alexander G Украина  
Дата: 13.11.09 13:22
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Просто, как то глупо хранить у себя pdb-ник (которые и весят не кисло), если в любой момент можно вытащить тот же код из сорссейфа.


Насчёт размера — не так уж и много. Тем более, хранить вечно нужно только билды, выданные пользователям.

Насчёт удобства вытащить — в Debug Tools for Windows есть как и утилита для загрузки .pdb на свой сервер символов, так и средства для интеграции с системами контроля версий. Т.е. по клику по .dmp файлу загружается .exe, по нему загружается нужный .pdb, по .pdb загружаются нужные исходники.

Тот же код не обязательно выдаст тот же бинарник. Возможно, компилятор, SDK или сторонние библиотеки будут другими. Надёжнее использовать тот же бинарник.
Русский военный корабль идёт ко дну!
Re[5]: Бестолковый .dmp
От: ononim  
Дата: 13.11.09 13:59
Оценка:
AG>Тот же код не обязательно выдаст тот же бинарник. Возможно, компилятор, SDK или сторонние библиотеки будут другими. Надёжнее использовать тот же бинарник.
и самое главное — другим будет таймстамп
Как много веселых ребят, и все делают велосипед...
Re[6]: Бестолковый .dmp
От: Alexander G Украина  
Дата: 13.11.09 14:16
Оценка:
Здравствуйте, ononim, Вы писали:

AG>>Тот же код не обязательно выдаст тот же бинарник. Возможно, компилятор, SDK или сторонние библиотеки будут другими. Надёжнее использовать тот же бинарник.

O>и самое главное — другим будет таймстамп

Да, я уже выше писал пр время линковки в MINIDUMP_MODULE .dmp и оно же в PE бинарника.
На самом деле, всё оно решается, если есть вероятность, что после форса матчинга всё подойдёт.
Заказчику как-то захотелось паковать бинарники UPX-ом. После упаковки меняется размер и чексумма и .pdb не подходит. Было придумано добавлять в сервер символов неупакованные бинарники, а пришедшие .dmp файлы патчить, чтобы они ссылались на неупакованные файлы, таблицу соответсвий этих полей хранить в папке с символами. Всё заработало, хоть закачика отговорить от UPX удалось.
Русский военный корабль идёт ко дну!
Re[7]: Бестолковый .dmp
От: Kingofastellarwar Украина  
Дата: 13.11.09 16:06
Оценка:
Блин у меня ж одна дллка пакуется-шифруется
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Re[8]: Бестолковый .dmp
От: Alexander G Украина  
Дата: 13.11.09 16:20
Оценка:
Здравствуйте, Kingofastellarwar, Вы писали:

K>Блин у меня ж одна дллка пакуется-шифруется


Вы таки покажите лог WinDbg или скриншот студии, или опишите что там, бо "стек не показывается по человечески" — не совсем понятно.
Модуль наверху стека виден? Если да, чей?
Русский военный корабль идёт ко дну!
Re[9]: Бестолковый .dmp
От: Kingofastellarwar Украина  
Дата: 13.11.09 16:46
Оценка:
Здравствуйте, Alexander G, Вы писали:

AG>Здравствуйте, Kingofastellarwar, Вы писали:


K>>Блин у меня ж одна дллка пакуется-шифруется


AG>Вы таки покажите лог WinDbg или скриншот студии, или опишите что там, бо "стек не показывается по человечески" — не совсем понятно.

AG>Модуль наверху стека виден? Если да, чей?

Ну например вот такое

>ntdll.dll!7c90eb94()

[Frames below may be incorrect and/or missing, no symbols loaded for ntdll.dll]
dbghelp.dll!Win32LiveSystemProvider::OpenMapping()
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Re[10]: Бестолковый .dmp
От: ononim  
Дата: 13.11.09 16:55
Оценка:
>>ntdll.dll!7c90eb94()
K> [Frames below may be incorrect and/or missing, no symbols loaded for ntdll.dll]
K> dbghelp.dll!Win32LiveSystemProvider::OpenMapping()

полный лог плизз.
из того что вы написали могу предположить что вы забыли про .ecxr
Как много веселых ребят, и все делают велосипед...
Re[10]: Бестолковый .dmp
От: Alexander G Украина  
Дата: 13.11.09 17:06
Оценка:
Здравствуйте, Kingofastellarwar, Вы писали:

K>Здравствуйте, Alexander G, Вы писали:


AG>>Здравствуйте, Kingofastellarwar, Вы писали:


K>>>Блин у меня ж одна дллка пакуется-шифруется


AG>>Вы таки покажите лог WinDbg или скриншот студии, или опишите что там, бо "стек не показывается по человечески" — не совсем понятно.

AG>>Модуль наверху стека виден? Если да, чей?

K>Ну например вот такое


>>ntdll.dll!7c90eb94()

K> [Frames below may be incorrect and/or missing, no symbols loaded for ntdll.dll]
K> dbghelp.dll!Win32LiveSystemProvider::OpenMapping()

Предполагаю, что сервер символов Майкрософт не испульзуется/недоступен, локально имеются .pdb от ntdll на своей машине и от dbghelp.dll, но не от ntdll.dll пользователя.
Русский военный корабль идёт ко дну!
Re[11]: Бестолковый .dmp
От: Kingofastellarwar Украина  
Дата: 13.11.09 17:18
Оценка:
Здравствуйте, Alexander G, Вы писали:

AG>Предполагаю, что сервер символов Майкрософт не испульзуется/недоступен, локально имеются .pdb от ntdll на своей машине и от dbghelp.dll, но не от ntdll.dll пользователя.


Я настроил так, как описано в http://support.microsoft.com/kb/311503, символьный сервер чего-то закачал, в студии я поддержку включил, потому что windbg я не очень понимаю.
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Re[12]: Бестолковый .dmp
От: ononim  
Дата: 13.11.09 17:29
Оценка:
AG>>Предполагаю, что сервер символов Майкрософт не испульзуется/недоступен, локально имеются .pdb от ntdll на своей машине и от dbghelp.dll, но не от ntdll.dll пользователя.
K>Я настроил так, как описано в http://support.microsoft.com/kb/311503, символьный сервер чего-то закачал, в студии я поддержку включил, потому что windbg я не очень понимаю.
ну в студии я не очень понимаю
но судя по стеку кроме проблем с символами студия не переключилась на сохраненный exception context, что делает .ecxr в windbg. Поищите наверно гдето это должно быть там
Как много веселых ребят, и все делают велосипед...
Re[13]: Бестолковый .dmp
От: Kingofastellarwar Украина  
Дата: 13.11.09 17:36
Оценка:
Здравствуйте, ononim, Вы писали:

AG>>>Предполагаю, что сервер символов Майкрософт не испульзуется/недоступен, локально имеются .pdb от ntdll на своей машине и от dbghelp.dll, но не от ntdll.dll пользователя.

K>>Я настроил так, как описано в http://support.microsoft.com/kb/311503, символьный сервер чего-то закачал, в студии я поддержку включил, потому что windbg я не очень понимаю.
O>ну в студии я не очень понимаю
O>но судя по стеку кроме проблем с символами студия не переключилась на сохраненный exception context, что делает .ecxr в windbg. Поищите наверно гдето это должно быть там


Только что сделал такую штуку: открыл дмп , а в настройках символьного сервера нажал еще раз загрузить символы и стек поменялся на
_KiFastSystemCallRet@0()

мало, но уже лучше

а вот символы моих дллек тупо не хотят грузиться, хотя прописал прямой путь к ним в настройках...
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Re[14]: Бестолковый .dmp
От: Kingofastellarwar Украина  
Дата: 13.11.09 17:48
Оценка:
K>а вот символы моих дллек тупо не хотят грузиться, хотя прописал прямой путь к ним в настройках...

Загрузил и символы, оказыается кроме символов нужны еще и сами бинарники...нафига?...

Но стек всё равно их одной строчки
_KiFastSystemCallRet@0()
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Re[15]: Бестолковый .dmp
От: Kingofastellarwar Украина  
Дата: 13.11.09 18:11
Оценка:
Здравствуйте, Kingofastellarwar, Вы писали:


K>>а вот символы моих дллек тупо не хотят грузиться, хотя прописал прямой путь к ним в настройках...


K>Загрузил и символы, оказыается кроме символов нужны еще и сами бинарники...нафига?...


K>Но стек всё равно их одной строчки

K>_KiFastSystemCallRet@0()


Все до мои до единого дампы имеют такой стек....что за фигня такая?
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Re[16]: Бестолковый .dmp
От: ononim  
Дата: 13.11.09 18:31
Оценка:
K>Все до мои до единого дампы имеют такой стек....что за фигня такая?
это — не установленный exeption context
Как много веселых ребят, и все делают велосипед...
Re[16]: Бестолковый .dmp
От: Kingofastellarwar Украина  
Дата: 13.11.09 18:34
Оценка:
Итаг:

1. Символы грузить научился

2. Обязательно нужны бинарники (нафига???)

3. Бинарники должны располагаться по тем путям, по которым они были запущены у юзера (изврат!!!!)

4. Если не предавать EXCEPTION_INFO, то стека нам не увидеть.
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Re[17]: Бестолковый .dmp
От: PPA Россия http://flylinkdc.blogspot.com/
Дата: 14.11.09 01:35
Оценка:
Здравствуйте, Kingofastellarwar, Вы писали:
K>Итаг:
K>3. Бинарники должны располагаться по тем путям, по которым они были запущены у юзера (изврат!!!!)
хм. у меня это не так. ничего не путаешь?
Re[18]: Бестолковый .dmp
От: Kingofastellarwar Украина  
Дата: 14.11.09 10:04
Оценка:
Здравствуйте, PPA, Вы писали:

PPA>Здравствуйте, Kingofastellarwar, Вы писали:

K>>Итаг:
K>>3. Бинарники должны располагаться по тем путям, по которым они были запущены у юзера (изврат!!!!)
PPA>хм. у меня это не так. ничего не путаешь?


ну я вообще не проврял другие варианты , наверно можно еще рядом с дмп положить да?
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Re[19]: Бестолковый .dmp
От: Аноним  
Дата: 14.11.09 12:27
Оценка:
K>ну я вообще не проврял другие варианты , наверно можно еще рядом с дмп положить да?

да, я всегда рядом ложу.
Re[3]: Бестолковый .dmp
От: Feonyf  
Дата: 14.11.09 18:18
Оценка:
Здравствуйте, Kingofastellarwar, Вы писали:

K>Всё это есть и было.


Тогда далее.
Юзер прислал дамп. Для того что бы его открыть нужно следующее:
1. соответствующий дампу исполняемый файл (image file)
2. файл pdb, соответствующий этому исполняемому файлу

открываем exe + pdb + dmp с помощью windbg как здесь http://msdn.microsoft.com/en-us/library/cc266495.aspx написано.
вводим команду

!analyze -v


и смотрим вывод.
Грузить символы, как я понял, Вы научились.
Моя строка построения буста:
.\bjam link=static threading=multi runtime-link=static -j %NUMBER_OF_PROCESSORS% --with-filesystem --with-thread --with-date_time address-model=64
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.