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 unlimited
core文件放到当前路径
// 在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;
}
第十四行异常退出