如何解决libpqxx构造函数异常
void Repository::initialize() {
try {
string connectionString = m_connectionData.getConnectionString();
// connectionString = "host=localhost port=12324 dbname=databasename user=username password=pass"
auto x = new pqxx::connection(connectionString);
}
catch (failure& e) {
// Exception::Initialization is my exception class.
throw Initialization("Cannot initialize repository. Error is: " + string(e.what()));
}
catch (...) {
throw Initialization("Cannot initialize repository: unkNown error.");
}
}
它在Visual Studio 2019中构建。当我运行该程序时,它崩溃了。我无法捕捉到任何异常。
这是调用栈。它似乎在connection_base()
的析构函数上崩溃。
> accountpostgresqlrepository.dll!std::_Tree_val<std::_Tree_simple_types<std::pair<std::string const,pqxx::prepare::internal::prepared_def>>>::_Erase_head<std::allocator<std::_Tree_node<std::pair<std::string const,pqxx::prepare::internal::prepared_def>,void *>>>(std::allocator<std::_Tree_node<std::pair<std::string const,void *>> & _Al) Line 752 C++
accountpostgresqlrepository.dll!std::_Tree<std::_Tmap_traits<std::string,pqxx::prepare::internal::prepared_def,std::less<std::string>,std::allocator<std::pair<std::string const,pqxx::prepare::internal::prepared_def>>,0>>::~_Tree<std::_Tmap_traits<std::string,0>>() Line 1193 C++
accountpostgresqlrepository.dll!std::map<std::string,pqxx::prepare::internal::prepared_def>>>::~map<std::string,pqxx::prepare::internal::prepared_def>>>() C++
accountpostgresqlrepository.dll!pqxx::connection_base::~connection_base() C++
accountpostgresqlrepository.dll!`pqxx::basic_connection_base<pqxx::connect_direct>::basic_connection_base<pqxx::connect_direct>'::`1'::dtor$0() C++
vcruntime140_1d.dll!00007ff89f5f1030() UnkNown
vcruntime140_1d.dll!00007ff89f5f41f7() UnkNown
vcruntime140_1d.dll!00007ff89f5f65bb() UnkNown
vcruntime140_1d.dll!00007ff89f5f2cf2() UnkNown
vcruntime140_1d.dll!00007ff89f5f6d0b() UnkNown
ntdll.dll!00007ff8e18d119f() UnkNown
ntdll.dll!00007ff8e1851c56() UnkNown
vcruntime140_1d.dll!00007ff89f5f698f() UnkNown
vcruntime140_1d.dll!00007ff89f5f1c1e() UnkNown
vcruntime140_1d.dll!00007ff89f5f2195() UnkNown
vcruntime140_1d.dll!00007ff89f5f2ee5() UnkNown
vcruntime140_1d.dll!00007ff89f5f6d0b() UnkNown
accountpostgresqlrepository.dll!__GSHandlerCheck_EH4(_EXCEPTION_RECORD * ExceptionRecord,void * EstablisherFrame,_CONTEXT * ContextRecord,_disPATCHER_CONTEXT * dispatcherContext) Line 73 C++
ntdll.dll!00007ff8e18d111f() UnkNown
ntdll.dll!00007ff8e187b474() UnkNown
ntdll.dll!00007ff8e18cfc4e() UnkNown
KernelBase.dll!00007ff8def93e49() UnkNown
vcruntime140.dll!00007ff8cb606220() UnkNown
libpqxx.dll!__scrt_throw_std_bad_alloc() Line 35 C++
libpqxx.dll!operator new(unsigned __int64 size) Line 48 C++
[Inline Frame] libpqxx.dll!std::_Default_allocate_traits::_Allocate(const unsigned __int64) Line 77 C++
[Inline Frame] libpqxx.dll!std::_Allocate_manually_vector_aligned(const unsigned __int64) Line 120 C++
[Inline Frame] libpqxx.dll!std::_Allocate(const unsigned __int64) Line 201 C++
[Inline Frame] libpqxx.dll!std::allocator<char>::allocate(const unsigned __int64 _Count) Line 807 C++
[Inline Frame] libpqxx.dll!std::string::_Construct_lv_contents(const std::string &) Line 2668 C++
libpqxx.dll!std::string::basic_string<char,std::char_traits<char>,std::allocator<char>>(const std::string & _Right) Line 2276 C++
libpqxx.dll!pqxx::connectionpolicy::connectionpolicy(const std::string & opts) Line 26 C++
accountpostgresqlrepository.dll!pqxx::connect_direct::connect_direct(const std::string & opts) Line 92 C++
accountpostgresqlrepository.dll!pqxx::basic_connection_base<pqxx::connect_direct>::basic_connection_base<pqxx::connect_direct>(const std::string & opt) Line 60 C++
accountpostgresqlrepository.dll!AccountPostgresqlRepository::Private::Repository::initialize() Line 47 C++
wTradedesktop.exe!WTradeDesktop::NewAccountWizard::checkConnectionToRepository(const AccountRepository::Metadata & Metadata,const std::vector<std::pair<std::vector<std::string,std::allocator<std::string>>,AccountRepository::Parameter>,std::allocator<std::pair<std::vector<std::string,AccountRepository::Parameter>>> & parameters) Line 69 C++
wTradedesktop.exe!QtPrivate::FunctorCall<QtPrivate::IndexesList<0,1>,QtPrivate::List<AccountRepository::Metadata const &,std::vector<std::pair<std::vector<std::string,AccountRepository::Parameter>>> const &>,void,void (__cdecl WTradeDesktop::NewAccountWizard::*)(AccountRepository::Metadata const &,AccountRepository::Parameter>>> const &)>::call(void(WTradeDesktop::NewAccountWizard::*)(const AccountRepository::Metadata &,AccountRepository::Parameter>>> &) f,WTradeDesktop::NewAccountWizard * o,void * * arg) Line 152 C++
wTradedesktop.exe!QtPrivate::FunctionPointer<void (__cdecl WTradeDesktop::NewAccountWizard::*)(AccountRepository::Metadata const &,AccountRepository::Parameter>>> const &)>::call<QtPrivate::List<AccountRepository::Metadata const &,void>(void(WTradeDesktop::NewAccountWizard::*)(const AccountRepository::Metadata &,void * * arg) Line 186 C++
wTradedesktop.exe!QtPrivate::QSlotObject<void (__cdecl WTradeDesktop::NewAccountWizard::*)(AccountRepository::Metadata const &,AccountRepository::Parameter>>> const &),void>::impl(int which,QtPrivate::QSlotObjectBase * this_,QObject * r,void * * a,bool * ret) Line 419 C++
[External Code]
wTradedesktop.exe!WTradeDesktop::Gui::NewAccountWizard::MainWidget::accountRepositoryCurrentConnectionSelected(const AccountRepository::Metadata & _t1,AccountRepository::Parameter>>> & _t2) Line 368 C++
wTradedesktop.exe!WTradeDesktop::Gui::NewAccountWizard::MainWidget::enteraccountRepositoryCheckState() Line 77 C++
wTradedesktop.exe!QtPrivate::FunctorCall<QtPrivate::IndexesList<>,QtPrivate::List<>,void (__cdecl WTradeDesktop::Gui::NewAccountWizard::MainWidget::*)(void)>::call(void(WTradeDesktop::Gui::NewAccountWizard::MainWidget::*)() f,WTradeDesktop::Gui::NewAccountWizard::MainWidget * o,void * * arg) Line 152 C++
wTradedesktop.exe!QtPrivate::FunctionPointer<void (__cdecl WTradeDesktop::Gui::NewAccountWizard::MainWidget::*)(void)>::call<QtPrivate::List<>,void>(void(WTradeDesktop::Gui::NewAccountWizard::MainWidget::*)() f,void * * arg) Line 186 C++
wTradedesktop.exe!QtPrivate::QSlotObject<void (__cdecl WTradeDesktop::Gui::NewAccountWizard::MainWidget::*)(void),bool * ret) Line 419 C++
[External Code]
wTradedesktop.exe!WTradeDesktop::NewAccountWizard::run() Line 44 C++
wTradedesktop.exe!WTradeDesktop::Application::createNewAccount() Line 27 C++
wTradedesktop.exe!QtPrivate::FunctorCall<QtPrivate::IndexesList<>,void (__cdecl WTradeDesktop::Application::*)(void)>::call(void(WTradeDesktop::Application::*)() f,WTradeDesktop::Application * o,void * * arg) Line 152 C++
wTradedesktop.exe!QtPrivate::FunctionPointer<void (__cdecl WTradeDesktop::Application::*)(void)>::call<QtPrivate::List<>,void>(void(WTradeDesktop::Application::*)() f,void * * arg) Line 186 C++
wTradedesktop.exe!QtPrivate::QSlotObject<void (__cdecl WTradeDesktop::Application::*)(void),bool * ret) Line 419 C++
[External Code]
wTradedesktop.exe!WTradeDesktop::Gui::MainWindow::createNewAccountSelected() Line 133 C++
wTradedesktop.exe!QtPrivate::FunctorCall<QtPrivate::IndexesList<>,void (__cdecl WTradeDesktop::Gui::MainWindow::*)(void)>::call(void(WTradeDesktop::Gui::MainWindow::*)() f,WTradeDesktop::Gui::MainWindow * o,void * * arg) Line 152 C++
wTradedesktop.exe!QtPrivate::FunctionPointer<void (__cdecl WTradeDesktop::Gui::MainWindow::*)(void)>::call<QtPrivate::List<>,void>(void(WTradeDesktop::Gui::MainWindow::*)() f,void * * arg) Line 186 C++
wTradedesktop.exe!QtPrivate::QSlotObject<void (__cdecl WTradeDesktop::Gui::MainWindow::*)(void),bool * ret) Line 419 C++
[External Code]
wTradedesktop.exe!WTradeDesktop::Gui::MenuBar::MainMenuBar::createNewAccountSelected() Line 133 C++
wTradedesktop.exe!QtPrivate::FunctorCall<QtPrivate::IndexesList<>,void (__cdecl WTradeDesktop::Gui::MenuBar::MainMenuBar::*)(void)>::call(void(WTradeDesktop::Gui::MenuBar::MainMenuBar::*)() f,WTradeDesktop::Gui::MenuBar::MainMenuBar * o,void * * arg) Line 152 C++
wTradedesktop.exe!QtPrivate::FunctionPointer<void (__cdecl WTradeDesktop::Gui::MenuBar::MainMenuBar::*)(void)>::call<QtPrivate::List<>,void>(void(WTradeDesktop::Gui::MenuBar::MainMenuBar::*)() f,void * * arg) Line 186 C++
wTradedesktop.exe!QtPrivate::QSlotObject<void (__cdecl WTradeDesktop::Gui::MenuBar::MainMenuBar::*)(void),bool * ret) Line 419 C++
[External Code]
wTradedesktop.exe!WTradeDesktop::Gui::MenuBar::Account::newAccountSelected() Line 156 C++
wTradedesktop.exe!QtPrivate::FunctorCall<QtPrivate::IndexesList<>,void (__cdecl WTradeDesktop::Gui::MenuBar::Account::*)(void)>::call(void(WTradeDesktop::Gui::MenuBar::Account::*)() f,WTradeDesktop::Gui::MenuBar::Account * o,void * * arg) Line 152 C++
wTradedesktop.exe!QtPrivate::FunctionPointer<void (__cdecl WTradeDesktop::Gui::MenuBar::Account::*)(void)>::call<QtPrivate::List<>,void>(void(WTradeDesktop::Gui::MenuBar::Account::*)() f,void * * arg) Line 186 C++
wTradedesktop.exe!QtPrivate::QSlotObject<void (__cdecl WTradeDesktop::Gui::MenuBar::Account::*)(void),bool * ret) Line 419 C++
[External Code]
wTradedesktop.exe!main(int argc,char * * argv) Line 8 C++
[External Code]
我做错了什么?
我正在使用CMake,这是使用vcpkg创建的libpqxx
。该库在运行时使用LoadLibrary
加载。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。