我试图将segfaulting主应用程序的核心转储到Linux上运行的小型嵌入式系统上。主应用程序实质上处理设备的完整执行和功能,并在收到SIGSEGV
信号后使系统重新启动。
我已经确保:
ulimit -c unlimited
sysctl -w kernel.core_pattern='/path/to/dir/core_%e.%p'
我试图像这样丢弃虚拟进程的核心:
sleep 10 &
killall -SIGSEGV sleep
它可以按预期工作,在所需位置生成该过程的核心转储。
但是,主应用程序不会创建核心转储,而只会导致系统重新引导。我已经尝试通过telnet提供的shell手动对应用程序进行segfault调试,以及远程利用堆栈缓冲区溢出(这是我要研究的问题)。
由于这是一个小型嵌入式系统,因此我无法访问gdb,ptrace,pstack等常见实用程序。
这里是否有任何变通办法,可以让我在仍在运行时或收到SIGSEGV
信号后查看进程堆栈?