![]() |
1
3
记录函数入口/出口是解决问题的低级方法。我建议使用自动调试器检测(在regedit中使用image file execution options下的调试器键,或在下面提供链接的包中使用gflags),并尝试重新处理问题,直到问题崩溃。此外,可以使用脚本使用可疑模块的调试器日志函数调用历史,或者收集任何其他信息。
|
![]() |
2
2
日志记录的唯一问题是,当系统崩溃时,最新的日志项可能仍在缓存中,没有机会写入磁盘… 如果是我,我会尝试在另一台PC上运行这个程序,它可能是片状的硬件或驱动程序导致问题。应用程序“不应该”能够关闭系统。 |
![]() |
3
2
一些想法
另一种选择是使用诸如 strace 它将所有系统调用记录到内核中(有多种类型和实现,所以请选择您喜欢的)。如果你在撞车前看一下日志,你可能会找到肇事者 |
![]() |
4
2
您是否考虑过使用第二台计算机作为远程调试器(通过网络)?当应用程序(和系统)崩溃时,第二台机器应该仍然显示一些有用的信息,如果不是问题的实际点的话。我相信vc++有这种能力,至少在某些版本中是这样。 |
![]() |
5
2
对于Visual C++ _penter() and _pexit() 可以用来测试代码。 |
![]() |
6
0
GCC(包括版本 MingGW for Windows development )有一个名为 -finstrument-functions 它告诉编译器在每个函数调用周围发出对名为“cyg_profile_func_enter”和“cyg_profile_func_exit”的函数的特殊调用。对于VisualC++,有类似的选项称为 /GH 和 /Gh 。这会导致编译器围绕函数调用发出对“penter”和“pexit”的调用。 这些测试模式可用于实现日志记录系统,实现编译器生成的调用,以输出到本地文件系统或网络上的另一台计算机。 如果可能的话,我也会尝试使用 valgrind 或类似的检查工具。这可能会在你的问题失控之前抓住它。 |
![]() |
SRobertJames · 使用printf的gdb显示 1 年前 |
|
Subin · 在vscode中运行c时出错 1 年前 |
![]() |
Community wiki · 如何调试Python内存故障? 1 年前 |
![]() |
Kai · 有什么方法可以轻松优化VSCode中的锈迹? 2 年前 |
![]() |
Chris Brandon · 如何使节点在堆栈溢出时中断? 2 年前 |