Russian Qt Forum
Ноябрь 23, 2024, 14:47 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: [4.3.*] крашхэндлер  (Прочитано 11887 раз)
ритт
Гость
« : Декабрь 04, 2007, 21:40 »

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

кто уже сталкивался и разруливал данный затык, укажите верный путь к истине
Записан
ритт
Гость
« Ответ #1 : Декабрь 08, 2007, 18:55 »

ну что, никто никогда в подобном не нуждался?
или просто ветка далеко уползла и никто её не видит? - так, вот она Улыбающийся
Записан
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #2 : Декабрь 13, 2007, 10:38 »

нуждались
но у нас обычно
ulimit -c 1000000 и потом корку смотрим
Записан
Mikhail
Программист
*****
Offline Offline

Сообщений: 587


Просмотр профиля
« Ответ #3 : Декабрь 13, 2007, 13:22 »

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

кто уже сталкивался и разруливал данный затык, укажите верный путь к истине

Подскажи где в исходниках смотреть
Записан
ритт
Гость
« Ответ #4 : Декабрь 13, 2007, 14:19 »

что именно?
Записан
Mikor
Гость
« Ответ #5 : Декабрь 13, 2007, 14:39 »

Нуждались естесственно, но тема как-то далеко от Qt. Как хоть классы/функции в Qt называются? Пороем, мож что надумаем
Записан
Sergeich
Гость
« Ответ #6 : Декабрь 13, 2007, 19:19 »

Была заморочка на эту тему: http://prog.org.ru/forum/index.php/topic,4638
Под винду счас пользую StackWalker: http://www.codeproject.com/KB/threads/StackWalker.aspx
под линухом ставлю обработчик сигналов на SIGSEGV и SIGABRT, в нем юзаю backtrace, затем addr2line для получения номеров строчек кода и c++filt для деманглинга
Записан
ритт
Гость
« Ответ #7 : Декабрь 13, 2007, 20:01 »

Сергеич, большое Человеческое...
буду признателен, если выложишь правленный код стэкволкера (чтобы тоже не пришлось андеф уникод вставлять Улыбающийся )
а лучше сразу с примером подключения (чтобы не пришлось даже думать о нём Улыбающийся )

кстати, на кодепроекте я когда-то уже искал, однако, ничего путного не нашёл...сэкволкер хоть путный? поверю на слово...
Записан
Sergeich
Гость
« Ответ #8 : Декабрь 13, 2007, 23:25 »

Да вроде ниче, путный, тока иногда тупит пока инфу собирает. Генерит он че-то типа этого (сама прога и кутя были собраны в дебаге):
Код:
SymInit: Symbol-SearchPath: '.;D:\ist3mp\1.3\bin;D:\ist3mp\1.3\bin;C:\WINDOWS;C:\WINDOWS\system32;SRV*C:\websymbols*http://msdl.microsoft.com/download/symbols;', symOptions: 530, UserName: 'serg'
OS-Version: 5.1.2600 (Service Pack 2) 0x100-0x1
d:\ist3mp\1.3\isa3mp_src\processing\proc\unitrc_in_e\unitrc_in_e.cpp (1494): ProcUniTrcInput::modeFeedback
d:\ist3mp\1.3\isa3mp_src\processing\proc\unitrc_in_e\unitrc_in_e.cpp (108): ProcUniTrcInput::run
d:\ist3mp\1.3\isa3mp_src\shared\src\procbase\jfm.cpp (1129): ThreadJ::run
c:\qt\3.3.4\src\kernel\qthread_win.cpp (111): QThreadInstance::start
f:\vs70builds\3077\vc\crtbld\crt\src\threadex.c (241): _threadstartex
ERROR: SymGetLineFromAddr64, GetLastError: 487 (Address: 7C80B50B)
7C80B50B (kernel32): (filename not available): GetModuleFileNameA
Куды код выложить?
Записан
ритт
Гость
« Ответ #9 : Декабрь 14, 2007, 00:22 »

на любую шару
благодарствую
Записан
Mikor
Гость
« Ответ #10 : Декабрь 14, 2007, 00:59 »

Ссылочку плиз ) только не на рапидшару, умоляю ))
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #11 : Декабрь 14, 2007, 01:28 »

Очень полезная вещь, хотелось бы тож увидеть код использования Улыбающийся
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Sergeich
Гость
« Ответ #12 : Декабрь 14, 2007, 04:13 »

Значит так.... Качаем с указанного сайта исходники (http://www.codeproject.com/KB/threads/StackWalker/StackWalker.zip) Берем из архива stackwalker.h и stackwalker.cpp Добавляем в начало stackwalker.cpp строчки
Код:
#ifdef UNICODE
#undef UNICODE
#endif
Должно получится че-то типа этого:
Код:
/**********************************************************************
 *
 * StackWalker.cpp
 *
 *
 * History:
 *  2005-07-27   v1    - First public release on http://www.codeproject.com/
 *                       http://www.codeproject.com/threads/StackWalker.asp
 *  2005-07-28   v2    - Changed the params of the constructor and ShowCallstack
 *                       (to simplify the usage)
 *  2005-08-01   v3    - Changed to use 'CONTEXT_FULL' instead of CONTEXT_ALL
 *                       (should also be enough)
 *                     - Changed to compile correctly with the PSDK of VC7.0
 *                       (GetFileVersionInfoSizeA and GetFileVersionInfoA is wrongly defined:
 *                        it uses LPSTR instead of LPCSTR as first paremeter)
 *                     - Added declarations to support VC5/6 without using 'dbghelp.h'
 *                     - Added a 'pUserData' member to the ShowCallstack function and the
 *                       PReadProcessMemoryRoutine declaration (to pass some user-defined data,
 *                       which can be used in the readMemoryFunction-callback)
 *  2005-08-02   v4    - OnSymInit now also outputs the OS-Version by default
 *                     - Added example for doing an exception-callstack-walking in main.cpp
 *                       (thanks to owillebo: http://www.codeproject.com/script/profile/whos_who.asp?id=536268)
 *  2005-08-05   v5    - Removed most Lint (http://www.gimpel.com/) errors... thanks to Okko Willeboordse!
 *
 **********************************************************************/
#ifdef UNICODE
#undef UNICODE
#endif

#include <windows.h>
#include <tchar.h>
#include <stdio.h>
#pragma comment(lib, "version.lib")  // for "VerQueryValue"

#include "StackWalker.h"

Далее рисуем обертку:
Код:
#include <stackwalker.h>

class IstStackWalker : public StackWalker
{
public:
  IstStackWalker() : StackWalker( OptionsAll ^ RetrieveModuleInfo) {}
  virtual void OnOutput(LPCSTR szText) {
QString s(szText);
stackStr += QString(s);
StackWalker::OnOutput(szText);
}
QString callstack() const { return stackStr; }
private:
QString stackStr;
};

Юзаем:

Функция, вызываемамая при падениях:
Код:
//Рисуем стэк вызовов в файл crashinfo.txt
LONG WINAPI ExceptFilter(EXCEPTION_POINTERS* pExp)
{
  IstStackWalker sw;
  sw.ShowCallstack(GetCurrentThread(), pExp->ContextRecord);
QString stackReport = sw.callstack();
QFile file( "crash_report.txt" );
if ( file.open(IO_WriteOnly) )  {
QTextStream os(&file);
os << stackReport;
file.close();
}
}
return EXCEPTION_EXECUTE_HANDLER;
}

Установка этой ф-ции как обработчика исключений (обычно юзается в начале main() ):
Код:
	SetUnhandledExceptionFilter(ExceptFilter);

Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #13 : Декабрь 14, 2007, 14:34 »

2 Sergeich: спасибо!
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
C.H.
Гость
« Ответ #14 : Апрель 23, 2008, 12:01 »

Значит так.... Качаем с указанного сайта исходники (http://www.codeproject.com/KB/threads/StackWalker/StackWalker.zip)
архив можно еще тут скачать http://blog.kalmbachnet.de/files/StackWalker.zip
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.068 секунд. Запросов: 23.