Резюме
В моем приложении WPF мне был нужен TabControl с кнопками слева, поэтому я определил шаблон ControlTemplate с нужным макетом, и он работал нормально.
Тем не менее, мой тестер
Мой тестер использует инструмент автоматического тестирования под названием QTP
. Он говорит, что может протестировать все, что вы можете увидеть с помощью UISpy.exe
Пример приложения WPF (Xaml):
То, что мой поиск нашел до сих пор:
catch
никогда не вводится.
Следующий код воспроизводит проблему (g ++ 4.2, Mac OS X 10.6):
// library.cpp: exports f(), compiled with -fno-rtti
#include
#include
extern "C" {
void f() {
try {
throw std::invalid_argument("std::exception handler");
} catch( std::exception& e) {
std::cout << e.what() << "\n";
} catch(...) {
std::cout << "... handler\n";
}
}
}
// main.cpp: the main executable, dynamically loads the library
#include
typedef void(*fPtr)();
int main() {
void* handle = dlopen( "./libexception_problem.dylib", RTLD_LAZY );
fPtr p_f = reinterpret_cast( dlsym( handle, "f" ) );
p_f();
}
Вывод:
MacBook-Pro:teste pfranco$ # works fine with rtti
MacBook-Pro:teste pfranco$ g++ -c library.cpp && g++ -shared -o libexception_problem.dylib library.o && g++ main.cpp -o main && ./main
std::exception handler
MacBook-Pro:teste pfranco$ # breaks with -fno-rtti
MacBook-Pro:teste pfranco$ g++ -c -fno-rtti library.cpp && g++ -shared -o libexception_problem.dylib library.o && g++ -fno-rtti main.cpp -o main && ./main
... handler
MacBook-Pro:teste pfranco$ #-no_dead_strip_inits_and_terms doesn't change anything
MacBook-Pro:teste pfranco$ g++ -c -no_dead_strip_inits_and_terms -fno-rtti library.cpp && g++ -no_dead_strip_inits_and_terms -shared -o libexception_problem.dylib library.o && g++ -fno-rtti -no_dead_strip_inits_and_terms main.cpp -o main && ./main
... handler
MacBook-Pro:teste pfranco$ # linking against the shared library works, but this isn't always an option
MacBook-Pro:teste pfranco$ g++ -c -fno-rtti library.cpp && g++ -shared -o libexception_problem.dylib library.o && g++ -fno-rtti main.cpp -o main -L. -lexception_problem && ./main
std::exception handler
Это происходит только в том случае, если код, который выдает в разделяемой библиотеке , и только если перехваченный тип является базовым классом фактического исключения - catch (std :: invalid_argument &)
отлично работает, ] std :: logic_error &
нет.
Интересно, что этого не происходит в Linux , даже когда выполняются точно такие же команды.
Вопросы:
Большое спасибо.