![]() |
1
0
堆栈上的返回指针只是指向内存的指针。理论上,如果你看一个只调用一个函数的程序的调用堆栈,返回指针(对于那个函数)对于程序的每次执行都有不同的值。你会怎么分析? 理论上,您可以使用映射文件读取核心转储。但是这样做是非常特定于平台和编译器的。使用任何程序都无法创建用于执行此操作的通用工具。请阅读编译器的文档,看看它是否包含任何用于进行死后分析的工具。 |
![]() |
2
0
如果程序用assert语句修饰,则每个assert语句都定义一个有效状态。断言之间的程序语句定义有效的状态更改。 一个崩溃的程序已经违反了足够多的断言。 一个不正确但“不稳定”的程序至少违反了一个断言,但没有失败。
根本不清楚你在找什么。有效状态有时很难定义,但通常很容易表示为
由于崩溃的程序违反了一个或多个断言,因此具有显式可执行断言的程序不需要崩溃调试。它只会使assert语句失败,并明显死亡。 如果不想放入assert语句,那么基本上不可能知道什么状态 应该 是真的,并且(从未实际声明)的断言被违反。 展开调用堆栈以计算位置和嵌套很简单。但还不清楚这说明了什么。它告诉你什么东西坏了,但不是其他什么东西导致的。这需要猜测哪些断言应该是正确的,这需要对设计有深入的了解。 编辑。 “似乎相关”和“似乎无关”是不可解释的,不依赖于实际应用程序的实际设计和 应该 在每个堆栈帧中为真。 如果你不知道 应该 说真的,你只有一堆随机变量。给定一堆随机值,您可以对“相关”声明什么?
相关的?无关的?你怎么能不知道就把这些分类
一切
关于密码?如果你知道
一切
关于代码,您可以制定标准
|