diff --git a/cpp/run_analyze.md b/cpp/run_analyze.md new file mode 100644 index 0000000..27b2e32 --- /dev/null +++ b/cpp/run_analyze.md @@ -0,0 +1,50 @@ +# 关于运行中的进程运行状态分析 + +## 一、Linux篇 + +### 方法1:gcore + +测试源码: + +```c++ +#include +#include + +static int g_Mark = 1; + +void demo() +{ + int i = 60; + while (--i) { + std::this_thread::sleep_for(std::chrono::seconds(1)); + } + g_Mark = 0; +} + +int main() +{ + std::thread t(demo); + + t.join(); + return 0; +} +``` + +运行起来,然后查找进程`ID`: + +```shell +yun@ubuntu:~/Documents$ ps -ef | grep a.out +yun 2259 1990 0 04:44 pts/0 00:00:00 ./a.out +yun 2262 2243 0 04:45 pts/2 00:00:00 grep --color=auto a.out +``` + +查找到进程的进程`ID`,使用:`sudo gcore -o core.dump 2259` + +使用`gdb a.out core.dump.2259`启动调试,以下是基本的指令: + +| 指令 | 功能 | +| ------------------- | ---------------------------- | +| bt | 打印当前线程的调用栈 | +| thread apply all bt | 打印所有线程的调用栈 | +| thread | 切换到指定线程(可以后续bt) | +