调试核心转储时的源代码行
source lines while debugging a core dump
在c或c++中调试核心转储时,即,如果我们只剩下一个核心转储文件并尝试使用该核心文件进行调试,那么我们可以看到转储发生前的最后几行代码。堆栈跟踪只显示函数调用。
例如:在调试dbx或gdb列表命令中运行的进程期间
list Display lines of a source file
将给出当前正在执行的代码部分。以同样的方式,我们在查看核心转储时有选择权吗?我正在处理solaris mdb
gdb中的list
命令应提供源代码行号的详细信息以及核心文件中相应的源列表,如果:
- 可执行文件是在启用调试符号的情况下编译的(例如,gcc和g++中的
-g
) - 可执行文件的非剥离版本可用(即未通过运行
strip
删除调试信息) - 调试器能够找到相关的源文件
调试器应该仍然能够提供文件和行号,即使它无法找到源文件,因为行号信息构成调试符号的一部分。该信息应可通过bt
(回溯)命令以及info symbol
命令获得。
请注意,即使核心文件是从剥离的可执行文件生成的,只要您有权访问非剥离版本,您就可以在gdb中加载该版本,并指定核心文件。
请参阅gdb手册的第13章和第15章,以帮助gdb访问源文件。
如果使用-g选项编译,则可以显示源代码行。在dbx中,可以使用use
命令设置dbx源目录。
可以使用list
(l)命令来显示源线。
请参阅help
命令,了解如何使用dbx和gdb命令。
如果您在dbx中使用use
命令正确设置了源路径,或者使用-I
选项启动了它,那么在读取源行时,调试核心转储和正常进程几乎没有任何区别。
相关文章:
- 在Linux中哪里可以找到互斥、未来等的源代码
- 如何找出GDB的SIGTRAP核心转储的根本原因
- C++映射分割错误(核心转储)
- 尽管测试成功,CppUnit测试核心仍被丢弃.为什么
- 如果编译的源代码是特定于它编译的硬件的,我们如何分发它
- 使用cmake从源代码构建MySQL连接器/C++失败(与以前的声明冲突)
- 在c++中初始化矩阵时出现分段错误(核心转储)
- C++核心准则 C35 对于接口类"A base class destructor should be either public and virtual, or protected and nonv
- MPI突然停止了对多个核心的操作
- 在多个核心中处理一个HTTP请求
- 难以理解某些人解决IOI问题的源代码
- 如何处理来自核心指南检查器的关于gsl::at的静态分析警告
- 使用g++编译hdf5源代码
- 在c++中键入向量中的所有值后,得到分段错误(核心转储)
- 如何使用C++读取另一个程序中的源代码输出
- Poco FindMySql.cmake 无法找到 MySQL 源代码
- 更改命令行 qt5 源代码构建配置的正确/快速方法
- C++出现控制台错误.我无法识别源代码的问题
- 运算符继承和 cpp 核心准则 c.128 的问题
- 调试核心转储时的源代码行