Я пытаюсь отлаживать программу на 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. Может быть, что-то похожее на число, принятое за исключение?
Я не вижу смысла трансформировать C++ в JS для выполнения браузера, но неважно. В любом случае вы поймали бы исключение в C++, например: 'try {...} catch (std :: exception ex) {std :: cout << ex.what(); } '. – szczurcio
@szczurcio Можете ли вы пояснить, почему не было бы смысла видеть, что аргумент был? –
Извините, пожалуйста, уточните, какой аргумент? Если вы запрашиваете сообщение 'const char []', которое вы передаете в конструктор 'std :: runtime_error', это то, что' what() 'даст вам. – szczurcio