Я пытаюсь отлаживать программу на C++, скомпилированную с помощью Emscripten, которая генерирует исключения, в частности runtime_error. s, которые передают строку как what_arg
. Однако, когда они выбрасывают, я просто получаю число (значение указателя?) в консоли Javascript. Строка, переданная конструктору, была бы гораздо полезнее.
Например, программа
#include <stdexcept>
int main()
{
throw std::runtime_error("I want to see this in the console");
return 0;
}
скомпилировано с использованием Emscripten 1.35.0 64bit (в Mac OS X) командой
em++ exception.cc -o exception.html
при просмотре в браузере выводит в консоль
Uncaught 5247024
Как я могу увидеть во время выполнения, каким был аргумент what_arg
?
В идеале это было бы без блока try-catch в коде C++, поэтому я мог бы использовать DISABLE_EXCEPTION_CATCHING флаг. Существуют способы преобразования адреса памяти строки в стиле C в строку Javascript с помощью Pointer_stringify. Может быть, есть что-то подобное для номера, переданного как исключение?
try {...} catch (std::exception ex) { std::cout << ex.what( ); }
. - person user4520   schedule 15.11.2015const char[]
, которое вы передаете конструкторуstd::runtime_error
, это то, что вам дастwhat( )
. - person user4520   schedule 15.11.2015const char[]
, а не преобразование C++ в JS для выполнения в браузере. Мои причины преобразования C++ в JS для выполнения в браузере заключаются в том, что существует существующая кодовая база C++, которая должна работать в браузере. Да, понял проwhat
. - person Michal Charemza   schedule 15.11.2015std::exception
, и вывести егоwhat( )
без блока try-catch. Вы можете прочитать оstd::set_terminate
иstd::set_unexpected
, но они не позволят вам напечатать сообщение просто потому, что не каждый тип исключения должен иметь его (в C++ любой класс может быть выброшен как исключение, в отличие, например, от Java). - person user4520   schedule 15.11.2015