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

Подскажите как такое делают?
приложение выводит 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
Creash report
    #38998267
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SmilDevПодскажите как такое делают?
С помощью StackWalk64(), например.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Creash report
    #38998455
alexy_black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я наследую объект исключения от booster::backtarce
booster - от автора cppcms (cppcms.com)
...
Рейтинг: 0 / 0
Creash report
    #38998462
SmilDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
4 сообщений из 4, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Creash report
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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