Android 当本机(C/C+;+;)进程在linux中未崩溃时,如何显式转储该进程的调用堆栈信息
伙计们: 如您所知,在linux/android中,当一个进程收到一些SIG,这意味着该进程发生崩溃,例如页面错误、段错误等,那么对于这些信号,系统的默认行为将首先转储核心信息,包括调用堆栈信息,然后删除该进程 但有时,虽然我的程序没有崩溃,但它实际上已经异常运行,并不是我所期望的。然后我想知道它现在正在运行的代码,所以我想手动转储它的调用堆栈信息。那怎么办呢?是否手动向其发送段故障信号?否则 有人可以分享经验吗Android 当本机(C/C+;+;)进程在linux中未崩溃时,如何显式转储该进程的调用堆栈信息,android,linux,process,Android,Linux,Process,伙计们: 如您所知,在linux/android中,当一个进程收到一些SIG,这意味着该进程发生崩溃,例如页面错误、段错误等,那么对于这些信号,系统的默认行为将首先转储核心信息,包括调用堆栈信息,然后删除该进程 但有时,虽然我的程序没有崩溃,但它实际上已经异常运行,并不是我所期望的。然后我想知道它现在正在运行的代码,所以我想手动转储它的调用堆栈信息。那怎么办呢?是否手动向其发送段故障信号?否则 有人可以分享经验吗 提前做很多事情。抛出异常并立即捕获它。我对C不够熟悉,但在java中,这看起来是这
提前做很多事情。抛出异常并立即捕获它。我对C不够熟悉,但在java中,这看起来是这样的:
try {
throw new RuntimeException("bla bla");
} catch (Exception ex) {
ex.printStackTrace();
}
好吧,如果你想要简单、粗糙而且可能有效的,反引用空指针就可以了。从标题来看,想要的似乎不太可能是java(Dalvik)虚拟机的堆栈跟踪。相反,arm(或其他)处理器的实际本机调用堆栈才是所需要的。对于ARM目标来说,这比其他许多目标更难确定,因此,让Android内置的本机崩溃日志功能来完成这项艰巨的工作可能是可取的。啊,很抱歉。我模模糊糊地记得它是关于C的,因为我昨天确实读过它的标题,但今天我只看了文本和标签。你认为C中对应的东西都不是他想要的吗?C没有例外。C++确实是这样,但只不过是一个丑陋的黑客(Android上特别丑陋和可选的),所以只使用它们导致堆栈转储似乎有点迂回。