
macOS
Ubuntu18(docker)# macOS
自带gdb
# Ubuntu
sudo apt install gdb在docker容器中使用
gdb分析coredump时,再启动容器时,需要加入一些参数
docker run --ulimit core=-1 --privileged
# docker run -itd -p 6789:22 --name=ros --ulimit core=-1 --privileged owner:base-1.3.1#include <iostream>
#include <memory>
#include <vector>
struct A{
std::string s;
};
int main() {
std::shared_ptr<A> a = nullptr;
std::vector<int> b;
std::cout << "-----" << std::endl;
std::cout << a->s << std::endl; // 异常退出
// std::cout << b.at(10) << std::endl;
std::cout << "-----" << std::endl;
return 0;
}设置core文件的大小
// 当前终端生效,unlimited: 没有限制
ulimit -c unlimitedcore文件放到当前路径
// 在docker环境下设置失败
sudo sysctl -w kernel.core_pattern="core-%e"cmake -DCMAKE_BUILD_TYPE=DEBUG ..
make./test# gdb + 可执行文件 + coredump文件
gbd test core-test第十三行异常退出

修改异常代码块,再次编译,查看效果
#include <iostream>
#include <memory>
#include <vector>
struct A{
std::string s;
};
int main() {
std::shared_ptr<A> a = nullptr;
std::vector<int> b;
std::cout << "-----" << std::endl;
// std::cout << a->s << std::endl;
std::cout << b.at(10) << std::endl; // 异常退出
std::cout << "-----" << std::endl;
return 0;
}第十四行异常退出
