Я реализовываю логирование информации о выброшенных исключениях (информация включает в себя стэк вызовов). Я спрашивал недавно как можно реализовать логирование стэка вызовов https://stackoverflow.com/questions/48924449/reliable-way-to-print-exception-backtrace-in-catch-handler. И решил проверить стэки на платформах x86 и x64. Результаты сравнения немного удивили меня. Вот программа:
#include <iostream>
#include <Windows.h>
using namespace std;
struct A
{
};
void foo3()
{
throw A();
}
void foo2()
{
foo3();
}
void foo1()
{
foo2();
}
void foo()
{
try
{
foo1();
}
catch(...)
{
cout << "exception rethrowing" << endl;
throw;
}
}
int seh_filter(_EXCEPTION_POINTERS* exception)
{
cout << "SEH FILTER" << endl;
return EXCEPTION_EXECUTE_HANDLER;
}
int main(void)
{
__try
{
foo();
}
__except(seh_filter(GetExceptionInformation()))
{
cout << "SEH catch handler" << endl;
}
return 0;
}
Установил точку остановки в seh_filter
чтобы просмотреть стэк (запустил дебажные сборки). Вот изображения:
Не могу понять, почему так сильно различаются стэки (особенно под x64). Я только слышал что изменилась обработка seh исключений под x64. Использую msvc2013 под Windows 10.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Несколько запутался с проверкой типов в SFINAEДопустим, есть:
В файле AddressSanitizercpp есть функция AddressSanitizer::instrumentStoreInstruction(
Какие функции в Visual Studio (помимо system("pause");) останавливают закрытие консоли
Имееться код hash-алгоритмаТак как его надо исследовать, необходимо его запустить (для начала)