SlideShare a Scribd company logo
1 of 42
Кроссплатформенный краш-репорт.
Обзор возможностей google breakpad.
Докладчик: Демчук Дмитрий
Руководитель С++ отдела
Google Breakpad. Задача
Проблема
 Программы содержат дефекты;
 Дефекты проявляются на окружении
пользователя/тестировщика;
 Сборки с дефектами уходят в релиз;
Цель:
 Возможность исправлять дефекты по отчетам от
пользователей
Google Breakpad. Задача
Google Breakpad
Platforms:
 Windows
 Linux
 Mac OS X
 Solaris
 iOS
 Android
API индивидуальное под каждую платформу.
Report format:
 Minidump files (Microsoft)
Breakpad. Сборка
Windows:
1. GYP & Python
2. MSVC
Linux:
1. autotools
2. g++
Mac OS
1. xCode, autotools
2. clang, g++
Exception handling
App.exe
1. In - process
App.exe
2. out-of-process
crash.dmp crash.dmp
generates
CrashDumper.exe
IPC
generates
+ простая интеграция
- низкая надежность
- сложная интеграция
+ высокая надежность
Breakpad. Windows библиотеки
common.lib
exception_handler.lib
crash_generation_client.lib
crash_generation_server.lib
App.exe
common.lib
CrashDumper.exe
IPC
Windows. In-process-example
…
#include "exception_handler.h“
…
int main(int argc, char * argv[])
{
using namespace google_breakpad;
const std::wstring dumpPath(L"./");
ExceptionHandler handler(dumpPath,
&filterCallback, &minidumpCallback,
NULL, ExceptionHandler::HANDLER_ALL);
/// Application code
…
return 0;
}
Windows. In-process-example
…
#include "exception_handler.h“
bool filterCallback(void * context,
EXCEPTION_POINTERS * exinfo,
MDRawAssertionInfo * assertion)
{
return true;
}
bool minidumpCallback(const wchar_t * dump_path,
const wchar_t * minidump_id,
void * context,
EXCEPTION_POINTERS* exinfo,
MDRawAssertionInfo* assertion,
bool succeeded)
{
return true;
}
Windows. In-process-example
Application breakpad
new ExceptionHandler
set handlers
Worker thread
waitFor…
...
kernel32.dll
callback is invoked
start thread
wake upbool filterCallback(…)
WriteDump…
bool minidumpCallback(…)
Windows. Out-of-process Client
#include "exception_handler.h“
…
int main(int argc, char * argv[])
{
const std::wstring pipeName(L".pipeBreakpadCrashService");
const std::wstring dumpPath(L"./");
ExceptionHandler handler(dumpPath, &filterCallback,
&minidumpCallback, NULL,
ExceptionHandler::HANDLER_ALL,
MiniDumpNormal, pipeName.c_str(), NULL);
/// Application code
…
return 0;
}
Windows. Out-of-process Server
#include "client/windows/crash_generation/crash_generation_server.h"
#include "client/windows/crash_generation/client_info.h"
void onClientConnectedCallback(void * context,
const ClientInfo * client_info)
{
std::cout << "Client is connected pid= " << client_info->pid()
<< std::endl;
}
void onClientDumpRequestCallback(void * context,
const ClientInfo * client_info,
const std::wstring * file_path)
{
std::cout << "pid = " << client_info->pid() << std::endl;
}
…
Windows. Out-of-process Server
#include "client/windows/crash_generation/crash_generation_server.h"
#include "client/windows/crash_generation/client_info.h"
…
void onClientExitedCallback(void * context,
const google_breakpad::ClientInfo * client_info)
{
std::cout << "Client is exited pid = " << client_info->pid()
<< std::endl;
}
void onClientUploadRequestCallback(void* context, const DWORD crash_id)
{
std::cout << "Client upload request callback crashID = " << crash_id
<< std::endl;
}
…
Windows. Out-of-process Server
…
int main(int argc, char * argv[])
{
using namespace google_breakpad;
const std::wstring pipeName(L".pipeBreakpadCrashService");
const std::wstring dumpPath(L"./");
CrashGenerationServer server(pipeName, NULL,
onClientConnectedCallback, NULL,
onClientDumpRequestCallback, NULL,
onClientExitedCallback, NULL,
onClientUploadRequestCallback, NULL,
true, &dumpPath);
if (!server.Start())
return -1;
Sleep(INFINITE);
return 0;
}
Breakpad. Out-of-process-example
app.exe breakpad
Worker thread
waitFor…
...
filterCallback
WriteDump…
waitFor…minidumpCallback
breakpad CrashService.exe
onClientConnectedCallback
onClientDumpRequestCallback
onClientExitedCallback
Breakpad. Capture dump
…
int main(int argc, char * argv[])
{
using namespace google_breakpad;
const std::wstring dumpPath(L"./");
ExceptionHandler handler(dumpPath, &filterCallback,
&minidumpCallback, NULL,
ExceptionHandler::HANDLER_ALL);
/// Application code
…
handler.WriteMinidump();
…
return 0;
}
Windows. Реализация
Обработчики
SetUnhandledExceptionFilter(…);
__set_invalid_parameter_handler(…);
__set_purecall_handler(…);
Снятие дампа
DbgHelp.dll
BOOL MiniDumpWriteDump(HANDLE hProcess,
DWORD ProcessId, HANDLE hFile … );
Открытие *dmp для Windows
application.exe
lib1.dll
...
libN.dll
application.pdb
lib1. pdb
...
libN. pdb
source code
crash.dmp
Breakpad. Linux библиотеки
breakpad_client
breakpad_client
App
CrashDumper
IPC
Linux. In-process example
#include "exception_handler.h“
bool filterCallback(void * context)
{
return true;
}
bool minidumpCallback(const MinidumpDescriptor & descriptor,
void * context, bool succeeded)
{
return true;
}
…
Linux. In-process example
…
int main(int argc, char * argv[])
{
using namespace google_breakpad;
MinidumpDescriptor descriptor("./");
ExceptionHandler handler(descriptor, &filterCallback,
&minidumpCallback, NULL,
true, -1);
/// Application code
…
return 0;
}
Linux. In-process example
app.exe breakpad
...
filterCallback
minidumpCallback
sigaction
app.exebreakpad
sys_clone
Create *dmp
new ExceptionHandler
Linux. Out-of-process Client
#include "exception_handler.h"
#include "examplesCommon/common.h"
using namespace google_breakpad;
bool filterCallback(void * context)…
bool minidumpCallback(const MinidumpDescriptor & descriptor,
void * context, bool succeeded)…
int main(int argc, char * argv[]) {
int serverFD(0);
MinidumpDescriptor descriptor("./");
ExceptionHandler handler(descriptor, &filterCallback,
&minidumpCallback, NULL, true, serverFD);
/// Application code
…
return 0;
}
Linux. Out-of-process Server
#include "client/linux/crash_generation/crash_generation_server.h“
#include "client/linux/crash_generation/client_info.h"
using namespace google_breakpad;
void onClientDumpRequestCallback(void * context,
const ClientInfo * client_info,
const std::string * file_path)
{
}
void OnClientExitingCallback(void * context,
const ClientInfo * client_info)
{
}
Linux. Out-of-process Server
#include "client/linux/crash_generation/crash_generation_server.h“
#include "client/linux/crash_generation/client_info.h"
using namespace google_breakpad;
…
int main(int argc, char * argv[])
{
const std::string dumpPath("./");
int serverFD(0), clientFD(0);
if (!CrashGenerationServer::CreateReportChannel(&serverFD, &clientFD))
return -1;
CrashGenerationServer server(serverFD,
&onClientDumpRequestCallback, NULL,
&OnClientExitingCallback, NULL, true, &dumpPath);
server.Start();
sleep(100000000);
…
}
Linux. Реализация
 Обработчики
int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact);
SIGSEGV, SIGABRT, SIGFPE, SIGILL, SIGBUS
 Снятие дампа
long ptrace(enum __ptrace_request request, pid_t pid, void *addr, void
*data);
Linux. Инструменты работы с dmp
5d8cb….2a102.dmp
dump_symsapplication
my_lib.so
application.sym
my_lib.sym
symbols
… …
minidump_stackwalk stack trace
Thread 0 (crashed)
0 inProcessExample!handleArgs(int, char**, google_breakpad::ExceptionHandler*)
[common.cpp : 86 + 0x3]
eip = 0x0804e015 esp = 0xbf916db0 ebp = 0xbf916dd8 ebx = 0x002ebff4
esi = 0x00000000 edi = 0x00000000 eax = 0x00000000 ecx = 0x002ed8b8
edx = 0x00000000 efl = 0x00210286
Found by: given as instruction pointer in context
1 inProcessExample!main [main.cpp : 29 + 0x1a]
eip = 0x0804db77 esp = 0xbf916de0 ebp = 0xbf916e88 ebx = 0x002ebff4
esi = 0x00000000 edi = 0x00000000
Found by: call frame info
2 libc-2.15.so + 0x194d3
eip = 0x0015f4d3 esp = 0xbf916e90 ebp = 0x00000000 ebx = 0x002ebff4
esi = 0x00000000 edi = 0x00000000
Found by: call frame info
3 libc-2.15.so + 0x1a5ff4
eip = 0x002ebff4 esp = 0xbf916eb8 ebp = 0x00000000
Found by: stack scanning
4 inProcessExample + 0x5928
eip = 0x0804d928 esp = 0xbf916ee0 ebp = 0x00000000
minidump-2-core *.core
Linux core file
Linux. Утилита dump_syms
dump_syms
inProcessExample
…
MODULE Linux x86 62F39E85D30A5F150EBD5B34E085C7AC0 inProcessExample
FILE 0 /home/user/GoogleBreakPad/breakpad/./src/client/linux/crash_generation/crash_generation_client.h
FILE 1 /home/user/GoogleBreakPad/breakpad/./src/client/linux/handler/microdump_extra_info.h
FILE 2 /home/use
...
FUNC 5660 39 0 MinidumpWriter::MinidumpWriter
5660 f 124 27
566f 2a 142 27
FUNC 569a 1d9 0 MinidumpWriter::WriteFile
569a 1 1118 27
...
symbols
└── inProcessExample
└── 62F39E85D30A5F150EBD5B34E085C7AC0
└── inProcessExample.sym
Linux. Stack trace
Operating system: Linux
0.0.0 Linux 3.2.0-70-generic #105-
Ubuntu SMP Wed Sep 24 19:49:46 UTC 2014 i686
CPU: x86
GenuineIntel family 6 model 42 stepping 7
1 CPU
Crash reason: SIGSEGV
Crash address: 0x0
Process uptime: not available
Thread 0 (crashed)
0 inProcessExample!handleArgs(int, char**,
google_breakpad::ExceptionHandler*) [common.cpp : 86 +
0x3]
eip = 0x0804e015 esp = 0xbf916db0 ebp =
0xbf916dd8 ebx = 0x002ebff4
esi = 0x00000000 edi = 0x00000000 eax =
0x00000000 ecx = 0x002ed8b8
edx = 0x00000000 efl = 0x00210286
Found by: given as instruction pointer in context
Linux. Stack trace
…
0x00000000 ecx = 0x002ed8b8
edx = 0x00000000 efl = 0x00210286
Found by: given as instruction pointer in context
1 inProcessExample!main [main.cpp : 29 + 0x1a]
eip = 0x0804db77 esp = 0xbf916de0 ebp =
0xbf916e88 ebx = 0x002ebff4
esi = 0x00000000 edi = 0x00000000
Found by: call frame info
2 libc-2.15.so + 0x194d3
eip = 0x0015f4d3 esp = 0xbf916e90 ebp =
0x00000000 ebx = 0x002ebff4
esi = 0x00000000 edi = 0x00000000
Found by: call frame info
…
Linux. Core - file
> ./minidump-2-core 5d8cbd57-7164-867f-416fe783-2a02a102.dmp >
5d8cbd57-7164-867f-416fe783-2a02a102.core
> gdb 5d8cbd57-7164-867f-416fe783-2a02a102.core
inProcessExample
Program terminated with signal 11, Segmentation fault.
#0 0x0804e015 in handleArgs (argc=2, argv=0xbf916f24,
handler=0xbf916e04)
at
/home/user/GoogleBreakPad/samples/source/examplesCommon/common
.cpp:86
86 *i = 12;
(gdb) bt
…
Linux. Core - file
(gdb) bt
#0 0x0804e015 in handleArgs (argc=2, argv=0xbf916f24,
handler=0xbf916e04)
at
/home/user/GoogleBreakPad/samples/source/examplesCommon
/common.cpp:86
#1 0x0804db77 in main (argc=2, argv=0xbf916f24)
at
/home/user/GoogleBreakPad/samples/source/linux/inProces
sExample/main.cpp:29
(gdb)
Breakpad. Mac OS. Библиотеки
Breakpad.Framework
Breakpad.Framework
App
CrashDumper
IPC
Mac OS. In-process example
#include "exception_handler.h“
bool filterCallback(void *context)
{
return true;
}
bool minidumpCallback(const char * dump_dir,
const char * minidump_id,
void * context, bool succeeded)
{
return true;
}
…
Mac OS. In-process example
int main(int argc, char * argv[])
{
using namespace google_breakpad;
ExceptionHandler handler("./", &filterCallback,
&minidumpCallback, NULL,
true, NULL);
/// Application code
…
return 0;
}
Mac OS. Out-of-process Client
#include "exception_handler.h“
…
int main(int argc, char * argv[])
{
using namespace google_breakpad;
const char * serverPort = "crash_generation_server";
ExceptionHandler handler("./", &filterCallback,
&minidumpCallback, NULL,
true, serverPort);
/// Application code
…
return 0;
}
Mac OS. Out-of-process Server
#include "client/mac/crash_generation/crash_generation_server.h“
#include "client/mac/crash_generation/client_info.h"
using namespace google_breakpad;
bool filterCallback(void *context)
{
std::cout << "filterCallback is invoked" << std::endl;
return true;
}
void onClientDumpRequestCallback(void * context, const ClientInfo & client_info,
const std::string & file_path)
{
std::cout << "Client dump request callback threadId = " << client_info.pid() << std::endl;
}
void OnClientExitingCallback(void * context, const ClientInfo & client_info)
{
std::cout << "Client is exited threadId = " << client_info.pid() << std::endl;
}
Mac OS. Out-of-process Server
int main(int argc, char * argv[])
{
const std::string dumpPath("./crashes/");
const char * serverPort = "crash_generation_server";
CrashGenerationServer server(serverPort,
&filterCallback, NULL,
&onClientDumpRequestCallback, NULL,
&OnClientExitingCallback, NULL, true,
dumpPath);
if (!server.Start())
return -1;
sleep(10000000);
return 0;
}
Report server?
breakpad
App.exe
CrashDumper.exe
breakpad
IPC
21a7ccc…. 7067.dmp
generates
Internet
Unix Server
minidump_s
tackwalk
*.dmp *.sym
stack trace
Report server
 Soccoro (Mozilla)
 mini-breakpad-server
Общие рекомендации
1. Сборка
 Релизные сборки с отладочной информацией
RelWithDebInfo (/Zi)
 Система версионирования сборок/бинарников
 Зашивать номер версии в ресурсы бинарников
 Хранить все артефакты от публичных релизов (source +
binary + pdb)
2. Реализация out-of-processs способа
 Когда и как стартует/останавливается вспомогательный
процесс
 Реализация посылки краш-репорта на сервер
Спасибо за внимание!
Докладчик: Демчук Дмитрий

More Related Content

What's hot

Windbg랑 친해지기
Windbg랑 친해지기Windbg랑 친해지기
Windbg랑 친해지기Ji Hun Kim
 
How to make a large C++-code base manageable
How to make a large C++-code base manageableHow to make a large C++-code base manageable
How to make a large C++-code base manageablecorehard_by
 
Евгений Крутько, Многопоточные вычисления, современный подход.
Евгений Крутько, Многопоточные вычисления, современный подход.Евгений Крутько, Многопоточные вычисления, современный подход.
Евгений Крутько, Многопоточные вычисления, современный подход.Platonov Sergey
 
Evgeniy Muralev, Mark Vince, Working with the compiler, not against it
Evgeniy Muralev, Mark Vince, Working with the compiler, not against itEvgeniy Muralev, Mark Vince, Working with the compiler, not against it
Evgeniy Muralev, Mark Vince, Working with the compiler, not against itSergey Platonov
 
Fuzzing: The New Unit Testing
Fuzzing: The New Unit TestingFuzzing: The New Unit Testing
Fuzzing: The New Unit TestingDmitry Vyukov
 
Kirk Shoop, Reactive programming in C++
Kirk Shoop, Reactive programming in C++Kirk Shoop, Reactive programming in C++
Kirk Shoop, Reactive programming in C++Sergey Platonov
 
Алексей Кутумов, Coroutines everywhere
Алексей Кутумов, Coroutines everywhereАлексей Кутумов, Coroutines everywhere
Алексей Кутумов, Coroutines everywhereSergey Platonov
 
Антон Бикинеев, Reflection in C++Next
Антон Бикинеев,  Reflection in C++NextАнтон Бикинеев,  Reflection in C++Next
Антон Бикинеев, Reflection in C++NextSergey Platonov
 
Architecture for Massively Parallel HDL Simulations
Architecture for Massively Parallel HDL Simulations Architecture for Massively Parallel HDL Simulations
Architecture for Massively Parallel HDL Simulations DVClub
 
Алексей Кутумов, Вектор с нуля
Алексей Кутумов, Вектор с нуляАлексей Кутумов, Вектор с нуля
Алексей Кутумов, Вектор с нуляSergey Platonov
 
Антон Нонко, Классические строки в C++
Антон Нонко, Классические строки в C++Антон Нонко, Классические строки в C++
Антон Нонко, Классические строки в C++Sergey Platonov
 
One definition rule - что это такое, и как с этим жить
One definition rule - что это такое, и как с этим житьOne definition rule - что это такое, и как с этим жить
One definition rule - что это такое, и как с этим житьPlatonov Sergey
 
200 Open Source Projects Later: Source Code Static Analysis Experience
200 Open Source Projects Later: Source Code Static Analysis Experience200 Open Source Projects Later: Source Code Static Analysis Experience
200 Open Source Projects Later: Source Code Static Analysis ExperienceAndrey Karpov
 
Tensor comprehensions
Tensor comprehensionsTensor comprehensions
Tensor comprehensionsMr. Vengineer
 
2018 cosup-delete unused python code safely - english
2018 cosup-delete unused python code safely - english2018 cosup-delete unused python code safely - english
2018 cosup-delete unused python code safely - englishJen Yee Hong
 
Best Bugs from Games: Fellow Programmers' Mistakes
Best Bugs from Games: Fellow Programmers' MistakesBest Bugs from Games: Fellow Programmers' Mistakes
Best Bugs from Games: Fellow Programmers' MistakesAndrey Karpov
 
Csw2016 gong pwn_a_nexus_device_with_a_single_vulnerability
Csw2016 gong pwn_a_nexus_device_with_a_single_vulnerabilityCsw2016 gong pwn_a_nexus_device_with_a_single_vulnerability
Csw2016 gong pwn_a_nexus_device_with_a_single_vulnerabilityCanSecWest
 

What's hot (20)

Windbg랑 친해지기
Windbg랑 친해지기Windbg랑 친해지기
Windbg랑 친해지기
 
How to make a large C++-code base manageable
How to make a large C++-code base manageableHow to make a large C++-code base manageable
How to make a large C++-code base manageable
 
Евгений Крутько, Многопоточные вычисления, современный подход.
Евгений Крутько, Многопоточные вычисления, современный подход.Евгений Крутько, Многопоточные вычисления, современный подход.
Евгений Крутько, Многопоточные вычисления, современный подход.
 
Evgeniy Muralev, Mark Vince, Working with the compiler, not against it
Evgeniy Muralev, Mark Vince, Working with the compiler, not against itEvgeniy Muralev, Mark Vince, Working with the compiler, not against it
Evgeniy Muralev, Mark Vince, Working with the compiler, not against it
 
C++17 now
C++17 nowC++17 now
C++17 now
 
Fuzzing: The New Unit Testing
Fuzzing: The New Unit TestingFuzzing: The New Unit Testing
Fuzzing: The New Unit Testing
 
Kirk Shoop, Reactive programming in C++
Kirk Shoop, Reactive programming in C++Kirk Shoop, Reactive programming in C++
Kirk Shoop, Reactive programming in C++
 
Алексей Кутумов, Coroutines everywhere
Алексей Кутумов, Coroutines everywhereАлексей Кутумов, Coroutines everywhere
Алексей Кутумов, Coroutines everywhere
 
Антон Бикинеев, Reflection in C++Next
Антон Бикинеев,  Reflection in C++NextАнтон Бикинеев,  Reflection in C++Next
Антон Бикинеев, Reflection in C++Next
 
TensorFlow XLA RPC
TensorFlow XLA RPCTensorFlow XLA RPC
TensorFlow XLA RPC
 
Architecture for Massively Parallel HDL Simulations
Architecture for Massively Parallel HDL Simulations Architecture for Massively Parallel HDL Simulations
Architecture for Massively Parallel HDL Simulations
 
Алексей Кутумов, Вектор с нуля
Алексей Кутумов, Вектор с нуляАлексей Кутумов, Вектор с нуля
Алексей Кутумов, Вектор с нуля
 
Антон Нонко, Классические строки в C++
Антон Нонко, Классические строки в C++Антон Нонко, Классические строки в C++
Антон Нонко, Классические строки в C++
 
One definition rule - что это такое, и как с этим жить
One definition rule - что это такое, и как с этим житьOne definition rule - что это такое, и как с этим жить
One definition rule - что это такое, и как с этим жить
 
Tiramisu概要
Tiramisu概要Tiramisu概要
Tiramisu概要
 
200 Open Source Projects Later: Source Code Static Analysis Experience
200 Open Source Projects Later: Source Code Static Analysis Experience200 Open Source Projects Later: Source Code Static Analysis Experience
200 Open Source Projects Later: Source Code Static Analysis Experience
 
Tensor comprehensions
Tensor comprehensionsTensor comprehensions
Tensor comprehensions
 
2018 cosup-delete unused python code safely - english
2018 cosup-delete unused python code safely - english2018 cosup-delete unused python code safely - english
2018 cosup-delete unused python code safely - english
 
Best Bugs from Games: Fellow Programmers' Mistakes
Best Bugs from Games: Fellow Programmers' MistakesBest Bugs from Games: Fellow Programmers' Mistakes
Best Bugs from Games: Fellow Programmers' Mistakes
 
Csw2016 gong pwn_a_nexus_device_with_a_single_vulnerability
Csw2016 gong pwn_a_nexus_device_with_a_single_vulnerabilityCsw2016 gong pwn_a_nexus_device_with_a_single_vulnerability
Csw2016 gong pwn_a_nexus_device_with_a_single_vulnerability
 

Viewers also liked

Institute for Sustainable Technology
Institute for Sustainable TechnologyInstitute for Sustainable Technology
Institute for Sustainable Technologygdwaechter
 
Wiki-подход к организации студенческих исследований
Wiki-подход к организации студенческих исследованийWiki-подход к организации студенческих исследований
Wiki-подход к организации студенческих исследованийOksana Silantieva
 
Gor Nishanov, C++ Coroutines – a negative overhead abstraction
Gor Nishanov,  C++ Coroutines – a negative overhead abstractionGor Nishanov,  C++ Coroutines – a negative overhead abstraction
Gor Nishanov, C++ Coroutines – a negative overhead abstractionSergey Platonov
 
Григорий Демченко, Универсальный адаптер
Григорий Демченко, Универсальный адаптерГригорий Демченко, Универсальный адаптер
Григорий Демченко, Универсальный адаптерSergey Platonov
 
Использование юнит-тестов для повышения качества разработки
Использование юнит-тестов для повышения качества разработкиИспользование юнит-тестов для повышения качества разработки
Использование юнит-тестов для повышения качества разработкиvictor-yastrebov
 
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и Javascript
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и JavascriptСергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и Javascript
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и JavascriptSergey Platonov
 
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...Platonov Sergey
 
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионалов
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионаловПолухин Антон, Как делать не надо: C++ велосипедостроение для профессионалов
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионаловSergey Platonov
 
Догнать и перегнать boost::lexical_cast
Догнать и перегнать boost::lexical_castДогнать и перегнать boost::lexical_cast
Догнать и перегнать boost::lexical_castRoman Orlov
 
Алексей Кутумов, C++ без исключений, часть 3
Алексей Кутумов,  C++ без исключений, часть 3Алексей Кутумов,  C++ без исключений, часть 3
Алексей Кутумов, C++ без исключений, часть 3Platonov Sergey
 
Для чего мы делали свой акторный фреймворк и что из этого вышло?
Для чего мы делали свой акторный фреймворк и что из этого вышло?Для чего мы делали свой акторный фреймворк и что из этого вышло?
Для чего мы делали свой акторный фреймворк и что из этого вышло?Yauheni Akhotnikau
 
Фитнес для вашего кода: как держать его в форме
Фитнес для вашего кода: как держать его в формеФитнес для вашего кода: как держать его в форме
Фитнес для вашего кода: как держать его в формеIlia Shishkov
 
C++ Core Guidelines
C++ Core Guidelines C++ Core Guidelines
C++ Core Guidelines Sergey Zubkov
 
Quality assurance of large c++ projects
Quality assurance of large c++ projectsQuality assurance of large c++ projects
Quality assurance of large c++ projectscorehard_by
 
Повседневный С++: алгоритмы и итераторы @ C++ Russia 2017
Повседневный С++: алгоритмы и итераторы @ C++ Russia 2017Повседневный С++: алгоритмы и итераторы @ C++ Russia 2017
Повседневный С++: алгоритмы и итераторы @ C++ Russia 2017Mikhail Matrosov
 
Василий Сорокин, Простой REST сервер на Qt с рефлексией
Василий Сорокин, Простой REST сервер на Qt с рефлексиейВасилий Сорокин, Простой REST сервер на Qt с рефлексией
Василий Сорокин, Простой REST сервер на Qt с рефлексиейSergey Platonov
 

Viewers also liked (17)

Institute for Sustainable Technology
Institute for Sustainable TechnologyInstitute for Sustainable Technology
Institute for Sustainable Technology
 
Wiki-подход к организации студенческих исследований
Wiki-подход к организации студенческих исследованийWiki-подход к организации студенческих исследований
Wiki-подход к организации студенческих исследований
 
Gor Nishanov, C++ Coroutines – a negative overhead abstraction
Gor Nishanov,  C++ Coroutines – a negative overhead abstractionGor Nishanov,  C++ Coroutines – a negative overhead abstraction
Gor Nishanov, C++ Coroutines – a negative overhead abstraction
 
Григорий Демченко, Универсальный адаптер
Григорий Демченко, Универсальный адаптерГригорий Демченко, Универсальный адаптер
Григорий Демченко, Универсальный адаптер
 
Использование юнит-тестов для повышения качества разработки
Использование юнит-тестов для повышения качества разработкиИспользование юнит-тестов для повышения качества разработки
Использование юнит-тестов для повышения качества разработки
 
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и Javascript
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и JavascriptСергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и Javascript
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и Javascript
 
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
 
Parallel STL
Parallel STLParallel STL
Parallel STL
 
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионалов
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионаловПолухин Антон, Как делать не надо: C++ велосипедостроение для профессионалов
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионалов
 
Догнать и перегнать boost::lexical_cast
Догнать и перегнать boost::lexical_castДогнать и перегнать boost::lexical_cast
Догнать и перегнать boost::lexical_cast
 
Алексей Кутумов, C++ без исключений, часть 3
Алексей Кутумов,  C++ без исключений, часть 3Алексей Кутумов,  C++ без исключений, часть 3
Алексей Кутумов, C++ без исключений, часть 3
 
Для чего мы делали свой акторный фреймворк и что из этого вышло?
Для чего мы делали свой акторный фреймворк и что из этого вышло?Для чего мы делали свой акторный фреймворк и что из этого вышло?
Для чего мы делали свой акторный фреймворк и что из этого вышло?
 
Фитнес для вашего кода: как держать его в форме
Фитнес для вашего кода: как держать его в формеФитнес для вашего кода: как держать его в форме
Фитнес для вашего кода: как держать его в форме
 
C++ Core Guidelines
C++ Core Guidelines C++ Core Guidelines
C++ Core Guidelines
 
Quality assurance of large c++ projects
Quality assurance of large c++ projectsQuality assurance of large c++ projects
Quality assurance of large c++ projects
 
Повседневный С++: алгоритмы и итераторы @ C++ Russia 2017
Повседневный С++: алгоритмы и итераторы @ C++ Russia 2017Повседневный С++: алгоритмы и итераторы @ C++ Russia 2017
Повседневный С++: алгоритмы и итераторы @ C++ Russia 2017
 
Василий Сорокин, Простой REST сервер на Qt с рефлексией
Василий Сорокин, Простой REST сервер на Qt с рефлексиейВасилий Сорокин, Простой REST сервер на Qt с рефлексией
Василий Сорокин, Простой REST сервер на Qt с рефлексией
 

Similar to Дмитрий Демчук. Кроссплатформенный краш-репорт

Crash dump analysis - experience sharing
Crash dump analysis - experience sharingCrash dump analysis - experience sharing
Crash dump analysis - experience sharingJames Hsieh
 
Linux kernel tracing superpowers in the cloud
Linux kernel tracing superpowers in the cloudLinux kernel tracing superpowers in the cloud
Linux kernel tracing superpowers in the cloudAndrea Righi
 
Crash_Report_Mechanism_In_Tizen
Crash_Report_Mechanism_In_TizenCrash_Report_Mechanism_In_Tizen
Crash_Report_Mechanism_In_TizenLex Yu
 
Android Nâng cao-Bài 9-Debug in Android Application Development
Android Nâng cao-Bài 9-Debug in Android Application Development Android Nâng cao-Bài 9-Debug in Android Application Development
Android Nâng cao-Bài 9-Debug in Android Application Development Phuoc Nguyen
 
Stability issues of user space
Stability issues of user spaceStability issues of user space
Stability issues of user space晓东 杜
 
Lecture 6 Kernel Debugging + Ports Development
Lecture 6 Kernel Debugging + Ports DevelopmentLecture 6 Kernel Debugging + Ports Development
Lecture 6 Kernel Debugging + Ports DevelopmentMohammed Farrag
 
PVS-Studio, a solution for resource intensive applications development
PVS-Studio, a solution for resource intensive applications developmentPVS-Studio, a solution for resource intensive applications development
PVS-Studio, a solution for resource intensive applications developmentOOO "Program Verification Systems"
 
Introductiontoasp netwindbgdebugging-100506045407-phpapp01
Introductiontoasp netwindbgdebugging-100506045407-phpapp01Introductiontoasp netwindbgdebugging-100506045407-phpapp01
Introductiontoasp netwindbgdebugging-100506045407-phpapp01Camilo Alvarez Rivera
 
Implementações paralelas
Implementações paralelasImplementações paralelas
Implementações paralelasWillian Molinari
 
Live deployment, ci, drupal
Live deployment, ci, drupalLive deployment, ci, drupal
Live deployment, ci, drupalAndrii Podanenko
 
Debugging Python with gdb
Debugging Python with gdbDebugging Python with gdb
Debugging Python with gdbRoman Podoliaka
 
[2009 CodeEngn Conference 03] koheung - 윈도우 커널 악성코드에 대한 분석 및 방법
[2009 CodeEngn Conference 03] koheung - 윈도우 커널 악성코드에 대한 분석 및 방법[2009 CodeEngn Conference 03] koheung - 윈도우 커널 악성코드에 대한 분석 및 방법
[2009 CodeEngn Conference 03] koheung - 윈도우 커널 악성코드에 대한 분석 및 방법GangSeok Lee
 
Application of Radare2 Illustrated by Shylock and Snakso.A Analysis
Application of Radare2 Illustrated by Shylock and Snakso.A AnalysisApplication of Radare2 Illustrated by Shylock and Snakso.A Analysis
Application of Radare2 Illustrated by Shylock and Snakso.A AnalysisPositive Hack Days
 
Formbook - In-depth malware analysis (Botconf 2018)
Formbook - In-depth malware analysis (Botconf 2018)Formbook - In-depth malware analysis (Botconf 2018)
Formbook - In-depth malware analysis (Botconf 2018)Rémi Jullian
 
Android Logging System
Android Logging SystemAndroid Logging System
Android Logging SystemWilliam Lee
 
sponsorAVAST-VB2014
sponsorAVAST-VB2014sponsorAVAST-VB2014
sponsorAVAST-VB2014Martin Hron
 
JVM Mechanics: When Does the JVM JIT & Deoptimize?
JVM Mechanics: When Does the JVM JIT & Deoptimize?JVM Mechanics: When Does the JVM JIT & Deoptimize?
JVM Mechanics: When Does the JVM JIT & Deoptimize?Doug Hawkins
 

Similar to Дмитрий Демчук. Кроссплатформенный краш-репорт (20)

Crash dump analysis - experience sharing
Crash dump analysis - experience sharingCrash dump analysis - experience sharing
Crash dump analysis - experience sharing
 
Linux kernel tracing superpowers in the cloud
Linux kernel tracing superpowers in the cloudLinux kernel tracing superpowers in the cloud
Linux kernel tracing superpowers in the cloud
 
Crash_Report_Mechanism_In_Tizen
Crash_Report_Mechanism_In_TizenCrash_Report_Mechanism_In_Tizen
Crash_Report_Mechanism_In_Tizen
 
Android Nâng cao-Bài 9-Debug in Android Application Development
Android Nâng cao-Bài 9-Debug in Android Application Development Android Nâng cao-Bài 9-Debug in Android Application Development
Android Nâng cao-Bài 9-Debug in Android Application Development
 
Stability issues of user space
Stability issues of user spaceStability issues of user space
Stability issues of user space
 
Lecture 6 Kernel Debugging + Ports Development
Lecture 6 Kernel Debugging + Ports DevelopmentLecture 6 Kernel Debugging + Ports Development
Lecture 6 Kernel Debugging + Ports Development
 
MyShell - English
MyShell - EnglishMyShell - English
MyShell - English
 
PVS-Studio, a solution for resource intensive applications development
PVS-Studio, a solution for resource intensive applications developmentPVS-Studio, a solution for resource intensive applications development
PVS-Studio, a solution for resource intensive applications development
 
Valgrind
ValgrindValgrind
Valgrind
 
Introductiontoasp netwindbgdebugging-100506045407-phpapp01
Introductiontoasp netwindbgdebugging-100506045407-phpapp01Introductiontoasp netwindbgdebugging-100506045407-phpapp01
Introductiontoasp netwindbgdebugging-100506045407-phpapp01
 
Implementações paralelas
Implementações paralelasImplementações paralelas
Implementações paralelas
 
Live deployment, ci, drupal
Live deployment, ci, drupalLive deployment, ci, drupal
Live deployment, ci, drupal
 
Debugging Python with gdb
Debugging Python with gdbDebugging Python with gdb
Debugging Python with gdb
 
[2009 CodeEngn Conference 03] koheung - 윈도우 커널 악성코드에 대한 분석 및 방법
[2009 CodeEngn Conference 03] koheung - 윈도우 커널 악성코드에 대한 분석 및 방법[2009 CodeEngn Conference 03] koheung - 윈도우 커널 악성코드에 대한 분석 및 방법
[2009 CodeEngn Conference 03] koheung - 윈도우 커널 악성코드에 대한 분석 및 방법
 
Application of Radare2 Illustrated by Shylock and Snakso.A Analysis
Application of Radare2 Illustrated by Shylock and Snakso.A AnalysisApplication of Radare2 Illustrated by Shylock and Snakso.A Analysis
Application of Radare2 Illustrated by Shylock and Snakso.A Analysis
 
Formbook - In-depth malware analysis (Botconf 2018)
Formbook - In-depth malware analysis (Botconf 2018)Formbook - In-depth malware analysis (Botconf 2018)
Formbook - In-depth malware analysis (Botconf 2018)
 
Android Logging System
Android Logging SystemAndroid Logging System
Android Logging System
 
sponsorAVAST-VB2014
sponsorAVAST-VB2014sponsorAVAST-VB2014
sponsorAVAST-VB2014
 
tools.ppt
tools.ppttools.ppt
tools.ppt
 
JVM Mechanics: When Does the JVM JIT & Deoptimize?
JVM Mechanics: When Does the JVM JIT & Deoptimize?JVM Mechanics: When Does the JVM JIT & Deoptimize?
JVM Mechanics: When Does the JVM JIT & Deoptimize?
 

More from Sergey Platonov

Лев Казаркин, Удивительные приключения регистров SSE или в поисках одного бага
Лев Казаркин, Удивительные приключения регистров SSE или в поисках одного багаЛев Казаркин, Удивительные приключения регистров SSE или в поисках одного бага
Лев Казаркин, Удивительные приключения регистров SSE или в поисках одного багаSergey Platonov
 
Павел Филонов, Разделяй и управляй вместе с Conan.io
Павел Филонов, Разделяй и управляй вместе с Conan.ioПавел Филонов, Разделяй и управляй вместе с Conan.io
Павел Филонов, Разделяй и управляй вместе с Conan.ioSergey Platonov
 
Григорий Демченко, Асинхронность и неблокирующая синхронизация
Григорий Демченко, Асинхронность и неблокирующая синхронизацияГригорий Демченко, Асинхронность и неблокирующая синхронизация
Григорий Демченко, Асинхронность и неблокирующая синхронизацияSergey Platonov
 
Антон Полухин. C++17
Антон Полухин. C++17Антон Полухин. C++17
Антон Полухин. C++17Sergey Platonov
 
Павел Беликов, Как избежать ошибок, используя современный C++
Павел Беликов, Как избежать ошибок, используя современный C++Павел Беликов, Как избежать ошибок, используя современный C++
Павел Беликов, Как избежать ошибок, используя современный C++Sergey Platonov
 
Денис Кандров, Пушкова Евгения, QSpec: тестирование графических приложений на Qt
Денис Кандров, Пушкова Евгения, QSpec: тестирование графических приложений на QtДенис Кандров, Пушкова Евгения, QSpec: тестирование графических приложений на Qt
Денис Кандров, Пушкова Евгения, QSpec: тестирование графических приложений на QtSergey Platonov
 
Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...
Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...
Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...Sergey Platonov
 
Павел Довгалюк, Обратная отладка
Павел Довгалюк, Обратная отладкаПавел Довгалюк, Обратная отладка
Павел Довгалюк, Обратная отладкаSergey Platonov
 
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворков
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворковНикита Глушков, К вопросу о реализации кроссплатформенных фреймворков
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворковSergey Platonov
 
Dori Exterman, Considerations for choosing the parallel computing strategy th...
Dori Exterman, Considerations for choosing the parallel computing strategy th...Dori Exterman, Considerations for choosing the parallel computing strategy th...
Dori Exterman, Considerations for choosing the parallel computing strategy th...Sergey Platonov
 
Александр Гранин, Функциональная 'Жизнь': параллельные клеточные автоматы и к...
Александр Гранин, Функциональная 'Жизнь': параллельные клеточные автоматы и к...Александр Гранин, Функциональная 'Жизнь': параллельные клеточные автоматы и к...
Александр Гранин, Функциональная 'Жизнь': параллельные клеточные автоматы и к...Sergey Platonov
 
Александр Фокин, Рефлексия в C++
Александр Фокин, Рефлексия в C++Александр Фокин, Рефлексия в C++
Александр Фокин, Рефлексия в C++Sergey Platonov
 
Михаил Матросов, Повседневный С++: boost и STL
Михаил Матросов, Повседневный С++: boost и STLМихаил Матросов, Повседневный С++: boost и STL
Михаил Матросов, Повседневный С++: boost и STLSergey Platonov
 
Борис Сазонов, RAII потоки и CancellationToken в C++
Борис Сазонов, RAII потоки и CancellationToken в C++Борис Сазонов, RAII потоки и CancellationToken в C++
Борис Сазонов, RAII потоки и CancellationToken в C++Sergey Platonov
 
Илья Шишков, Принципы создания тестируемого кода
Илья Шишков, Принципы создания тестируемого кодаИлья Шишков, Принципы создания тестируемого кода
Илья Шишков, Принципы создания тестируемого кодаSergey Platonov
 
Андрей Карпов, Приватные байки от разработчиков анализатора кода
Андрей Карпов, Приватные байки от разработчиков анализатора кодаАндрей Карпов, Приватные байки от разработчиков анализатора кода
Андрей Карпов, Приватные байки от разработчиков анализатора кодаSergey Platonov
 
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++ Юрий Ефимочев, Компилируемые в реальном времени DSL для С++
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++ Sergey Platonov
 

More from Sergey Platonov (17)

Лев Казаркин, Удивительные приключения регистров SSE или в поисках одного бага
Лев Казаркин, Удивительные приключения регистров SSE или в поисках одного багаЛев Казаркин, Удивительные приключения регистров SSE или в поисках одного бага
Лев Казаркин, Удивительные приключения регистров SSE или в поисках одного бага
 
Павел Филонов, Разделяй и управляй вместе с Conan.io
Павел Филонов, Разделяй и управляй вместе с Conan.ioПавел Филонов, Разделяй и управляй вместе с Conan.io
Павел Филонов, Разделяй и управляй вместе с Conan.io
 
Григорий Демченко, Асинхронность и неблокирующая синхронизация
Григорий Демченко, Асинхронность и неблокирующая синхронизацияГригорий Демченко, Асинхронность и неблокирующая синхронизация
Григорий Демченко, Асинхронность и неблокирующая синхронизация
 
Антон Полухин. C++17
Антон Полухин. C++17Антон Полухин. C++17
Антон Полухин. C++17
 
Павел Беликов, Как избежать ошибок, используя современный C++
Павел Беликов, Как избежать ошибок, используя современный C++Павел Беликов, Как избежать ошибок, используя современный C++
Павел Беликов, Как избежать ошибок, используя современный C++
 
Денис Кандров, Пушкова Евгения, QSpec: тестирование графических приложений на Qt
Денис Кандров, Пушкова Евгения, QSpec: тестирование графических приложений на QtДенис Кандров, Пушкова Евгения, QSpec: тестирование графических приложений на Qt
Денис Кандров, Пушкова Евгения, QSpec: тестирование графических приложений на Qt
 
Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...
Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...
Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...
 
Павел Довгалюк, Обратная отладка
Павел Довгалюк, Обратная отладкаПавел Довгалюк, Обратная отладка
Павел Довгалюк, Обратная отладка
 
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворков
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворковНикита Глушков, К вопросу о реализации кроссплатформенных фреймворков
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворков
 
Dori Exterman, Considerations for choosing the parallel computing strategy th...
Dori Exterman, Considerations for choosing the parallel computing strategy th...Dori Exterman, Considerations for choosing the parallel computing strategy th...
Dori Exterman, Considerations for choosing the parallel computing strategy th...
 
Александр Гранин, Функциональная 'Жизнь': параллельные клеточные автоматы и к...
Александр Гранин, Функциональная 'Жизнь': параллельные клеточные автоматы и к...Александр Гранин, Функциональная 'Жизнь': параллельные клеточные автоматы и к...
Александр Гранин, Функциональная 'Жизнь': параллельные клеточные автоматы и к...
 
Александр Фокин, Рефлексия в C++
Александр Фокин, Рефлексия в C++Александр Фокин, Рефлексия в C++
Александр Фокин, Рефлексия в C++
 
Михаил Матросов, Повседневный С++: boost и STL
Михаил Матросов, Повседневный С++: boost и STLМихаил Матросов, Повседневный С++: boost и STL
Михаил Матросов, Повседневный С++: boost и STL
 
Борис Сазонов, RAII потоки и CancellationToken в C++
Борис Сазонов, RAII потоки и CancellationToken в C++Борис Сазонов, RAII потоки и CancellationToken в C++
Борис Сазонов, RAII потоки и CancellationToken в C++
 
Илья Шишков, Принципы создания тестируемого кода
Илья Шишков, Принципы создания тестируемого кодаИлья Шишков, Принципы создания тестируемого кода
Илья Шишков, Принципы создания тестируемого кода
 
Андрей Карпов, Приватные байки от разработчиков анализатора кода
Андрей Карпов, Приватные байки от разработчиков анализатора кодаАндрей Карпов, Приватные байки от разработчиков анализатора кода
Андрей Карпов, Приватные байки от разработчиков анализатора кода
 
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++ Юрий Ефимочев, Компилируемые в реальном времени DSL для С++
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++
 

Recently uploaded

call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️Delhi Call girls
 
The Top App Development Trends Shaping the Industry in 2024-25 .pdf
The Top App Development Trends Shaping the Industry in 2024-25 .pdfThe Top App Development Trends Shaping the Industry in 2024-25 .pdf
The Top App Development Trends Shaping the Industry in 2024-25 .pdfayushiqss
 
BUS PASS MANGEMENT SYSTEM USING PHP.pptx
BUS PASS MANGEMENT SYSTEM USING PHP.pptxBUS PASS MANGEMENT SYSTEM USING PHP.pptx
BUS PASS MANGEMENT SYSTEM USING PHP.pptxalwaysnagaraju26
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsArshad QA
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Steffen Staab
 
LEVEL 5 - SESSION 1 2023 (1).pptx - PDF 123456
LEVEL 5   - SESSION 1 2023 (1).pptx - PDF 123456LEVEL 5   - SESSION 1 2023 (1).pptx - PDF 123456
LEVEL 5 - SESSION 1 2023 (1).pptx - PDF 123456KiaraTiradoMicha
 
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...SelfMade bd
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park masabamasaba
 
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfonteinmasabamasaba
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension AidPhilip Schwarz
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...Health
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfkalichargn70th171
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfkalichargn70th171
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comFatema Valibhai
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Modelsaagamshah0812
 
Pharm-D Biostatistics and Research methodology
Pharm-D Biostatistics and Research methodologyPharm-D Biostatistics and Research methodology
Pharm-D Biostatistics and Research methodologyAnusha Are
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsJhone kinadey
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxComplianceQuest1
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...ICS
 

Recently uploaded (20)

call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
The Top App Development Trends Shaping the Industry in 2024-25 .pdf
The Top App Development Trends Shaping the Industry in 2024-25 .pdfThe Top App Development Trends Shaping the Industry in 2024-25 .pdf
The Top App Development Trends Shaping the Industry in 2024-25 .pdf
 
BUS PASS MANGEMENT SYSTEM USING PHP.pptx
BUS PASS MANGEMENT SYSTEM USING PHP.pptxBUS PASS MANGEMENT SYSTEM USING PHP.pptx
BUS PASS MANGEMENT SYSTEM USING PHP.pptx
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
 
LEVEL 5 - SESSION 1 2023 (1).pptx - PDF 123456
LEVEL 5   - SESSION 1 2023 (1).pptx - PDF 123456LEVEL 5   - SESSION 1 2023 (1).pptx - PDF 123456
LEVEL 5 - SESSION 1 2023 (1).pptx - PDF 123456
 
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
 
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.com
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
Pharm-D Biostatistics and Research methodology
Pharm-D Biostatistics and Research methodologyPharm-D Biostatistics and Research methodology
Pharm-D Biostatistics and Research methodology
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docx
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
 

Дмитрий Демчук. Кроссплатформенный краш-репорт

  • 1. Кроссплатформенный краш-репорт. Обзор возможностей google breakpad. Докладчик: Демчук Дмитрий Руководитель С++ отдела
  • 2. Google Breakpad. Задача Проблема  Программы содержат дефекты;  Дефекты проявляются на окружении пользователя/тестировщика;  Сборки с дефектами уходят в релиз; Цель:  Возможность исправлять дефекты по отчетам от пользователей
  • 4. Google Breakpad Platforms:  Windows  Linux  Mac OS X  Solaris  iOS  Android API индивидуальное под каждую платформу. Report format:  Minidump files (Microsoft)
  • 5. Breakpad. Сборка Windows: 1. GYP & Python 2. MSVC Linux: 1. autotools 2. g++ Mac OS 1. xCode, autotools 2. clang, g++
  • 6. Exception handling App.exe 1. In - process App.exe 2. out-of-process crash.dmp crash.dmp generates CrashDumper.exe IPC generates + простая интеграция - низкая надежность - сложная интеграция + высокая надежность
  • 8. Windows. In-process-example … #include "exception_handler.h“ … int main(int argc, char * argv[]) { using namespace google_breakpad; const std::wstring dumpPath(L"./"); ExceptionHandler handler(dumpPath, &filterCallback, &minidumpCallback, NULL, ExceptionHandler::HANDLER_ALL); /// Application code … return 0; }
  • 9. Windows. In-process-example … #include "exception_handler.h“ bool filterCallback(void * context, EXCEPTION_POINTERS * exinfo, MDRawAssertionInfo * assertion) { return true; } bool minidumpCallback(const wchar_t * dump_path, const wchar_t * minidump_id, void * context, EXCEPTION_POINTERS* exinfo, MDRawAssertionInfo* assertion, bool succeeded) { return true; }
  • 10. Windows. In-process-example Application breakpad new ExceptionHandler set handlers Worker thread waitFor… ... kernel32.dll callback is invoked start thread wake upbool filterCallback(…) WriteDump… bool minidumpCallback(…)
  • 11. Windows. Out-of-process Client #include "exception_handler.h“ … int main(int argc, char * argv[]) { const std::wstring pipeName(L".pipeBreakpadCrashService"); const std::wstring dumpPath(L"./"); ExceptionHandler handler(dumpPath, &filterCallback, &minidumpCallback, NULL, ExceptionHandler::HANDLER_ALL, MiniDumpNormal, pipeName.c_str(), NULL); /// Application code … return 0; }
  • 12. Windows. Out-of-process Server #include "client/windows/crash_generation/crash_generation_server.h" #include "client/windows/crash_generation/client_info.h" void onClientConnectedCallback(void * context, const ClientInfo * client_info) { std::cout << "Client is connected pid= " << client_info->pid() << std::endl; } void onClientDumpRequestCallback(void * context, const ClientInfo * client_info, const std::wstring * file_path) { std::cout << "pid = " << client_info->pid() << std::endl; } …
  • 13. Windows. Out-of-process Server #include "client/windows/crash_generation/crash_generation_server.h" #include "client/windows/crash_generation/client_info.h" … void onClientExitedCallback(void * context, const google_breakpad::ClientInfo * client_info) { std::cout << "Client is exited pid = " << client_info->pid() << std::endl; } void onClientUploadRequestCallback(void* context, const DWORD crash_id) { std::cout << "Client upload request callback crashID = " << crash_id << std::endl; } …
  • 14. Windows. Out-of-process Server … int main(int argc, char * argv[]) { using namespace google_breakpad; const std::wstring pipeName(L".pipeBreakpadCrashService"); const std::wstring dumpPath(L"./"); CrashGenerationServer server(pipeName, NULL, onClientConnectedCallback, NULL, onClientDumpRequestCallback, NULL, onClientExitedCallback, NULL, onClientUploadRequestCallback, NULL, true, &dumpPath); if (!server.Start()) return -1; Sleep(INFINITE); return 0; }
  • 15. Breakpad. Out-of-process-example app.exe breakpad Worker thread waitFor… ... filterCallback WriteDump… waitFor…minidumpCallback breakpad CrashService.exe onClientConnectedCallback onClientDumpRequestCallback onClientExitedCallback
  • 16. Breakpad. Capture dump … int main(int argc, char * argv[]) { using namespace google_breakpad; const std::wstring dumpPath(L"./"); ExceptionHandler handler(dumpPath, &filterCallback, &minidumpCallback, NULL, ExceptionHandler::HANDLER_ALL); /// Application code … handler.WriteMinidump(); … return 0; }
  • 18. Открытие *dmp для Windows application.exe lib1.dll ... libN.dll application.pdb lib1. pdb ... libN. pdb source code crash.dmp
  • 20. Linux. In-process example #include "exception_handler.h“ bool filterCallback(void * context) { return true; } bool minidumpCallback(const MinidumpDescriptor & descriptor, void * context, bool succeeded) { return true; } …
  • 21. Linux. In-process example … int main(int argc, char * argv[]) { using namespace google_breakpad; MinidumpDescriptor descriptor("./"); ExceptionHandler handler(descriptor, &filterCallback, &minidumpCallback, NULL, true, -1); /// Application code … return 0; }
  • 22. Linux. In-process example app.exe breakpad ... filterCallback minidumpCallback sigaction app.exebreakpad sys_clone Create *dmp new ExceptionHandler
  • 23. Linux. Out-of-process Client #include "exception_handler.h" #include "examplesCommon/common.h" using namespace google_breakpad; bool filterCallback(void * context)… bool minidumpCallback(const MinidumpDescriptor & descriptor, void * context, bool succeeded)… int main(int argc, char * argv[]) { int serverFD(0); MinidumpDescriptor descriptor("./"); ExceptionHandler handler(descriptor, &filterCallback, &minidumpCallback, NULL, true, serverFD); /// Application code … return 0; }
  • 24. Linux. Out-of-process Server #include "client/linux/crash_generation/crash_generation_server.h“ #include "client/linux/crash_generation/client_info.h" using namespace google_breakpad; void onClientDumpRequestCallback(void * context, const ClientInfo * client_info, const std::string * file_path) { } void OnClientExitingCallback(void * context, const ClientInfo * client_info) { }
  • 25. Linux. Out-of-process Server #include "client/linux/crash_generation/crash_generation_server.h“ #include "client/linux/crash_generation/client_info.h" using namespace google_breakpad; … int main(int argc, char * argv[]) { const std::string dumpPath("./"); int serverFD(0), clientFD(0); if (!CrashGenerationServer::CreateReportChannel(&serverFD, &clientFD)) return -1; CrashGenerationServer server(serverFD, &onClientDumpRequestCallback, NULL, &OnClientExitingCallback, NULL, true, &dumpPath); server.Start(); sleep(100000000); … }
  • 26. Linux. Реализация  Обработчики int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact); SIGSEGV, SIGABRT, SIGFPE, SIGILL, SIGBUS  Снятие дампа long ptrace(enum __ptrace_request request, pid_t pid, void *addr, void *data);
  • 27. Linux. Инструменты работы с dmp 5d8cb….2a102.dmp dump_symsapplication my_lib.so application.sym my_lib.sym symbols … … minidump_stackwalk stack trace Thread 0 (crashed) 0 inProcessExample!handleArgs(int, char**, google_breakpad::ExceptionHandler*) [common.cpp : 86 + 0x3] eip = 0x0804e015 esp = 0xbf916db0 ebp = 0xbf916dd8 ebx = 0x002ebff4 esi = 0x00000000 edi = 0x00000000 eax = 0x00000000 ecx = 0x002ed8b8 edx = 0x00000000 efl = 0x00210286 Found by: given as instruction pointer in context 1 inProcessExample!main [main.cpp : 29 + 0x1a] eip = 0x0804db77 esp = 0xbf916de0 ebp = 0xbf916e88 ebx = 0x002ebff4 esi = 0x00000000 edi = 0x00000000 Found by: call frame info 2 libc-2.15.so + 0x194d3 eip = 0x0015f4d3 esp = 0xbf916e90 ebp = 0x00000000 ebx = 0x002ebff4 esi = 0x00000000 edi = 0x00000000 Found by: call frame info 3 libc-2.15.so + 0x1a5ff4 eip = 0x002ebff4 esp = 0xbf916eb8 ebp = 0x00000000 Found by: stack scanning 4 inProcessExample + 0x5928 eip = 0x0804d928 esp = 0xbf916ee0 ebp = 0x00000000 minidump-2-core *.core Linux core file
  • 28. Linux. Утилита dump_syms dump_syms inProcessExample … MODULE Linux x86 62F39E85D30A5F150EBD5B34E085C7AC0 inProcessExample FILE 0 /home/user/GoogleBreakPad/breakpad/./src/client/linux/crash_generation/crash_generation_client.h FILE 1 /home/user/GoogleBreakPad/breakpad/./src/client/linux/handler/microdump_extra_info.h FILE 2 /home/use ... FUNC 5660 39 0 MinidumpWriter::MinidumpWriter 5660 f 124 27 566f 2a 142 27 FUNC 569a 1d9 0 MinidumpWriter::WriteFile 569a 1 1118 27 ... symbols └── inProcessExample └── 62F39E85D30A5F150EBD5B34E085C7AC0 └── inProcessExample.sym
  • 29. Linux. Stack trace Operating system: Linux 0.0.0 Linux 3.2.0-70-generic #105- Ubuntu SMP Wed Sep 24 19:49:46 UTC 2014 i686 CPU: x86 GenuineIntel family 6 model 42 stepping 7 1 CPU Crash reason: SIGSEGV Crash address: 0x0 Process uptime: not available Thread 0 (crashed) 0 inProcessExample!handleArgs(int, char**, google_breakpad::ExceptionHandler*) [common.cpp : 86 + 0x3] eip = 0x0804e015 esp = 0xbf916db0 ebp = 0xbf916dd8 ebx = 0x002ebff4 esi = 0x00000000 edi = 0x00000000 eax = 0x00000000 ecx = 0x002ed8b8 edx = 0x00000000 efl = 0x00210286 Found by: given as instruction pointer in context
  • 30. Linux. Stack trace … 0x00000000 ecx = 0x002ed8b8 edx = 0x00000000 efl = 0x00210286 Found by: given as instruction pointer in context 1 inProcessExample!main [main.cpp : 29 + 0x1a] eip = 0x0804db77 esp = 0xbf916de0 ebp = 0xbf916e88 ebx = 0x002ebff4 esi = 0x00000000 edi = 0x00000000 Found by: call frame info 2 libc-2.15.so + 0x194d3 eip = 0x0015f4d3 esp = 0xbf916e90 ebp = 0x00000000 ebx = 0x002ebff4 esi = 0x00000000 edi = 0x00000000 Found by: call frame info …
  • 31. Linux. Core - file > ./minidump-2-core 5d8cbd57-7164-867f-416fe783-2a02a102.dmp > 5d8cbd57-7164-867f-416fe783-2a02a102.core > gdb 5d8cbd57-7164-867f-416fe783-2a02a102.core inProcessExample Program terminated with signal 11, Segmentation fault. #0 0x0804e015 in handleArgs (argc=2, argv=0xbf916f24, handler=0xbf916e04) at /home/user/GoogleBreakPad/samples/source/examplesCommon/common .cpp:86 86 *i = 12; (gdb) bt …
  • 32. Linux. Core - file (gdb) bt #0 0x0804e015 in handleArgs (argc=2, argv=0xbf916f24, handler=0xbf916e04) at /home/user/GoogleBreakPad/samples/source/examplesCommon /common.cpp:86 #1 0x0804db77 in main (argc=2, argv=0xbf916f24) at /home/user/GoogleBreakPad/samples/source/linux/inProces sExample/main.cpp:29 (gdb)
  • 33. Breakpad. Mac OS. Библиотеки Breakpad.Framework Breakpad.Framework App CrashDumper IPC
  • 34. Mac OS. In-process example #include "exception_handler.h“ bool filterCallback(void *context) { return true; } bool minidumpCallback(const char * dump_dir, const char * minidump_id, void * context, bool succeeded) { return true; } …
  • 35. Mac OS. In-process example int main(int argc, char * argv[]) { using namespace google_breakpad; ExceptionHandler handler("./", &filterCallback, &minidumpCallback, NULL, true, NULL); /// Application code … return 0; }
  • 36. Mac OS. Out-of-process Client #include "exception_handler.h“ … int main(int argc, char * argv[]) { using namespace google_breakpad; const char * serverPort = "crash_generation_server"; ExceptionHandler handler("./", &filterCallback, &minidumpCallback, NULL, true, serverPort); /// Application code … return 0; }
  • 37. Mac OS. Out-of-process Server #include "client/mac/crash_generation/crash_generation_server.h“ #include "client/mac/crash_generation/client_info.h" using namespace google_breakpad; bool filterCallback(void *context) { std::cout << "filterCallback is invoked" << std::endl; return true; } void onClientDumpRequestCallback(void * context, const ClientInfo & client_info, const std::string & file_path) { std::cout << "Client dump request callback threadId = " << client_info.pid() << std::endl; } void OnClientExitingCallback(void * context, const ClientInfo & client_info) { std::cout << "Client is exited threadId = " << client_info.pid() << std::endl; }
  • 38. Mac OS. Out-of-process Server int main(int argc, char * argv[]) { const std::string dumpPath("./crashes/"); const char * serverPort = "crash_generation_server"; CrashGenerationServer server(serverPort, &filterCallback, NULL, &onClientDumpRequestCallback, NULL, &OnClientExitingCallback, NULL, true, dumpPath); if (!server.Start()) return -1; sleep(10000000); return 0; }
  • 40. Report server  Soccoro (Mozilla)  mini-breakpad-server
  • 41. Общие рекомендации 1. Сборка  Релизные сборки с отладочной информацией RelWithDebInfo (/Zi)  Система версионирования сборок/бинарников  Зашивать номер версии в ресурсы бинарников  Хранить все артефакты от публичных релизов (source + binary + pdb) 2. Реализация out-of-processs способа  Когда и как стартует/останавливается вспомогательный процесс  Реализация посылки краш-репорта на сервер