调试巨大的C++;linux上的项目 我在C++开发了一个基于Mac的项目。它工作得很好。但是,当我尝试从Linux服务器启动它时,我得到一个错误的alloc错误: terminate called after throwing an instance of 'std::bad_alloc' what(): std::bad_alloc Aborted

调试巨大的C++;linux上的项目 我在C++开发了一个基于Mac的项目。它工作得很好。但是,当我尝试从Linux服务器启动它时,我得到一个错误的alloc错误: terminate called after throwing an instance of 'std::bad_alloc' what(): std::bad_alloc Aborted,c++,debugging,bad-alloc,C++,Debugging,Bad Alloc,我不知道如何调试整个项目,因为我完全不知道问题从何而来。为什么它在我的Mac电脑上工作而不是在Linux上?所有关于这方面的文章和问题只要求单文件程序,而不是40多个文件的项目 有没有办法获取导致错误alloc的文件或行 使用-g编译器选项构建程序,以获得有意义的堆栈跟踪 然后在调试器中运行程序,例如,gdb: gdb --args [executable] [arguments...] 加载gdb后,输入命令run,程序将运行。一旦异常被抛出并且没有被您的程序捕获,gdb将向您显示一个堆栈跟

我不知道如何调试整个项目,因为我完全不知道问题从何而来。为什么它在我的Mac电脑上工作而不是在Linux上?所有关于这方面的文章和问题只要求单文件程序,而不是40多个文件的项目


有没有办法获取导致错误alloc的文件或行

使用
-g
编译器选项构建程序,以获得有意义的堆栈跟踪

然后在调试器中运行程序,例如,
gdb

gdb --args [executable] [arguments...]
加载gdb后,输入命令
run
,程序将运行。一旦异常被抛出并且没有被您的程序捕获,
gdb
将向您显示一个堆栈跟踪,显示异常从何处抛出


<>代码:STD::BADYOLLYC/<代码>意味着程序不能分配更多内存,可能是因为OS内存不足或系统受到明确的内存限制。

为什么谷歌不“在Linux上调试巨大的C++项目”?你正在寻找调试器。对于Linux,
gdb
是标准配置。当您在
gdb
中运行程序时,它将在引发异常的位置停止,并显示导致该异常的整个堆栈跟踪。“有没有办法获取导致错误alloc的文件或行?”-当然有。将程序崩溃时生成的核心转储文件加载到调试器中,并检查调用堆栈。或者首先直接在调试器中运行它。在linux中,您有一个很棒的工具Valgrind,在这种情况下非常有用。一般来说,它会直接显示出现此类问题的行。我有多个.cc和.h文件,包括一个main.cc。我如何使用gcc创建可执行文件?@PaulBénéteau在运行之前是如何编译的?我使用了Xcode。我用大量的指纹找到了导致问题的那条线。我创建input_uu=std::make_shared()并加载其中的文件内容:input_uu->load(in)。我想,就是在那里发生的错误。@PaulBénéteau你通常不能在另一个系统上使用为一个系统编译的程序。您无法将可执行文件从Mac复制到Linux系统并假定它将正确运行。我不会复制可执行文件,而是复制所有源文件。