Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Creash report / 4 сообщений из 4, страница 1 из 1
02.07.2015, 19:05
    #38998264
SmilDev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Creash report
Всем привет.

Подскажите как такое делают?
приложение выводит call trace
т.е. стек вызовов функций, например

при отработке SEH исключения, ну например при обращении к не инициализированному элементу класса.

отработает исключение и выводится окно со стеком вызовов и номерами строк.

авторUE4Editor_FairyTale!AFTPlayer::AFTPlayer() [c:\unrealengine\fairytale\source\fairytale\models\ftplayer.cpp:24]
UE4Editor_CoreUObject!UClass::CreateDefaultObject() [c:\unrealengine\4.8.compil\engine\source\runtime\coreuobject\private\uobject\class.cpp:2587]
UE4Editor_CoreUObject!UObjectLoadAllCompiledInDefaultProperties() [c:\unrealengine\4.8.compil\engine\source\runtime\coreuobject\private\uobject\uobjectbase.cpp:729]
UE4Editor_CoreUObject!ProcessNewlyLoadedUObjects() [c:\unrealengine\4.8.compil\engine\source\runtime\coreuobject\private\uobject\uobjectbase.cpp:820]
UE4Editor_CoreUObject!TBaseStaticDelegateInstance<void __cdecl(void)>::ExecuteIfSafe() [c:\unrealengine\4.8.compil\engine\source\runtime\core\public\delegates\delegateinstancesimpl_variadics.inl:921]
UE4Editor_Core!TBaseMulticastDelegate<void>::Broadcast() [c:\unrealengine\4.8.compil\engine\source\runtime\core\public\delegates\delegatesignatureimpl_variadics.inl:1031]
UE4Editor_Core!FModuleManager::LoadModuleWithFailureReason() [c:\unrealengine\4.8.compil\engine\source\runtime\core\private\modules\modulemanager.cpp:431]
UE4Editor_Projects!FModuleDescriptor::LoadModulesForPhase() [c:\unrealengine\4.8.compil\engine\source\runtime\projects\private\moduledescriptor.cpp:370]
UE4Editor_Projects!FProjectManager::LoadModulesForProject() [c:\unrealengine\4.8.compil\engine\source\runtime\projects\private\projectmanager.cpp:52]
UE4Editor!FEngineLoop::LoadStartupModules() [c:\unrealengine\4.8.compil\engine\source\runtime\launch\private\launchengineloop.cpp:1922]
UE4Editor!FEngineLoop::PreInit() [c:\unrealengine\4.8.compil\engine\source\runtime\launch\private\launchengineloop.cpp:1444]
UE4Editor!GuardedMain() [c:\unrealengine\4.8.compil\engine\source\runtime\launch\private\launch.cpp:110]
UE4Editor!GuardedMainWrapper() [c:\unrealengine\4.8.compil\engine\source\runtime\launch\private\windows\launchwindows.cpp:126]
UE4Editor!WinMain() [c:\unrealengine\4.8.compil\engine\source\runtime\launch\private\windows\launchwindows.cpp:200]
...
Рейтинг: 0 / 0
02.07.2015, 19:10
    #38998267
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Creash report
SmilDevПодскажите как такое делают?
С помощью StackWalk64(), например.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
02.07.2015, 23:29
    #38998455
alexy_black
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Creash report
я наследую объект исключения от booster::backtarce
booster - от автора cppcms (cppcms.com)
...
Рейтинг: 0 / 0
02.07.2015, 23:37
    #38998462
SmilDev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Creash report
Dimitry Sibiryakov,

спасибо огромное.
воспользовался этим http://www.codeproject.com/Articles/11132/Walking-the-callstack

новый вопрос допустим у меня такая конструкция:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
#define GET_CURRENT_CONTEXT_STACKWALKER_CODEPLEX(c, contextFlags) \
  do { \
    memset(&c, 0, sizeof(CONTEXT)); \
    c.ContextFlags = contextFlags; \
    __asm    call x \
    __asm x: pop eax \
    __asm    mov c.Eip, eax \
    __asm    mov c.Ebp, ebp \
    __asm    mov c.Esp, esp \
  } while(0);
#endif

CONTEXT con;

func3()
{
	GET_CURRENT_CONTEXT_STACKWALKER_CODEPLEX(c, CONTEXT_FULL);
	
	// чтото делаю
}

func2()
{
	GET_CURRENT_CONTEXT_STACKWALKER_CODEPLEX(c, CONTEXT_FULL);
	
	// чтото делаю
	
	func3()
}

func1()
{
	try
	{
		GET_CURRENT_CONTEXT_STACKWALKER_CODEPLEX(c, CONTEXT_FULL);
		
		// чтото делаю
		
		func2();
	}
	catch(...)
	{
		// вывожу стек трейс по контексту
		StackWalker sw;
		sw.ShowCallstack(GetCurrentThread(), &c);
	}
}



так конечно работает и при исключении внутри funk2 или funk3 стек правильный.
но это тупо получать контекст в каждой функции.

как можно решить по другому?
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Creash report / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]