用 gdb debug c++ 程序,好多次遇到 Error while mapping shared library sections ,之前由于有其他的 debug 手段,因此就避开没有去追究是什么原因。今天遇到的问题没办法避开了,只能花时间来解决这个问题了。
很多时候为了做一些小实验或者尝试学习一套新的库,有关的动态链接库文件不会直接放到系统目录(诸如 /usr/lib)中,而只是在自己的 home 目录里面进行操作。并且通常为了方便,会把动态链接库文件和单元测试程序放到同一个目录中,同时把代表当前目录的
. 设置到 LD_LIBRARY_PATH 中,这样在很多情况下就不用额外设置 LD_LIBRARY_PATH 了。
经过一番尝试之后,发现正是由于这种做法导致了 gdb 报错。
解决方法:把用到的动态链接库文件目录显式地指定到 LD_LIBRARY_PATH 。
然后用 ldd
<program> 检查,看看输出结果中,有关的动态链接库文件是不是显示为全路径。
如果是全路径,那么 gdb 就不会再报错。如果是显示为相对路径,那么 gdb 就会报错。</program>
分享到:
相关推荐
1. **共享库**(Shared Library):共享库是一种可以在多个程序间共享代码和数据的动态链接库。在Linux环境下,共享库通常以`.so`扩展名结尾。 2. **位置独立代码 (PIC)**:这是一种特殊的代码形式,它可以被加载到...
在内存安全性方面,GDB集成了边界违规检测工具Pointer Checker,能够帮助开发者检测程序中的指针错误。这在调试C/C++程序时尤其重要,因为不当的指针使用是导致程序崩溃或安全漏洞的常见原因。 另一个与并发性相关...
GDB详细手册,文档内部分内容: //查看运行中的线程 (gdb) info thread //查看线程 (gdb) thread <n> //切换为线程id (gdb) bt //backtrace 打印堆栈 (gdb) break xx.cpp:xx thread all //在所有线程上打断点 (gdb) ...
GDB 在arm开发板上的远程调试 GDB 在arm开发板上的远程调试 GDB 在arm开发板上的远程调试 GDB 在arm开发板上的远程调试
例如,开发者可以使用 GDB 来调试程序,找到并修复错误;测试人员可以使用 GDB 来测试程序的正确性和性能;逆向工程师可以使用 GDB 来逆向工程和分析程序的内部实现细节。 知识点 7: GDB 的优点和缺点 GDB 的优点...
GDB能调试加载了动态库的程序,并通过`sharedlibrary`命令管理库的加载与卸载。对于核心转储文件(core dump),`gdb <程序> 文件>`可以分析崩溃时的程序状态。 ### 7. 使用GDB脚本 GDB支持通过`source`命令执行...
这款工具允许程序员在运行代码时检查程序的状态,包括变量值、内存区域、调用堆栈等,帮助定位和修复程序中的错误。"GDB完全手册.pdf.zip"包含了对GDB全面的介绍和指南,是学习和使用GDB的重要参考资料。 GDB中文...
Linux下GDB的移植 GDB是GNU开放源代码的调试器,广泛应用于Linux系统中。为了在Linux下进行程序调试,需要将GDB移植到目标平台上。本文将详细介绍GDB的移植步骤,包括准备工作、编译ncurses、编译GDB、测试等环节。...
2. **运行时错误检测**:通过GDB,可以检查程序运行时的内存状态,查找内存泄漏、越界访问等问题。 3. **远程调试**:GDB支持远程调试,可以在一台机器上调试运行在另一台机器上的程序。 4. **多语言支持**:除了C和...
GDB(GNU调试器)是Linux环境下用于C、C++等编程语言的开源调试工具,它可以帮助开发者在程序运行过程中检查变量状态、设置断点、单步执行代码,从而定位和修复程序中的错误。以下是对GDB安装的详细步骤解析: 1. *...
无论你是初学者还是经验丰富的开发者,GDB都能提供必要的功能来帮助你定位、理解和修复程序中的错误,从而提高软件质量。 一、GDB的基本使用 1. 安装与启动:在大多数Linux发行版中,GDB可以通过包管理器轻松安装...
`sharedlibrary`命令加载或卸载动态库,`info shared`显示已加载的库信息。 九、调试GDB自身 为了自我完善,GDB还提供了`gdb-gdb`模式,允许你使用GDB来调试GDB自身,这是一种高级技巧,有助于深入理解GDB的工作...
8. **动态加载和卸载库**:在调试动态链接的程序时,`sharedlibrary`命令可以加载或卸载共享库。 9. **条件断点**:GDB允许设定条件断点,只有当特定条件满足时才会暂停程序。 10. **监控点**:`watch`命令可以在...
`sharedlibrary`命令手动加载库,`info sharedlibrary`列出已加载的库。 14. **GDB配置与初始化** 可以在用户目录下创建.gdbinit文件,写入自定义的GDB初始化命令和设置。 通过深入学习和熟练掌握GDB,开发者能够...
使用`sharedlibrary`命令加载动态库,`info threads`查看线程状态,`thread <number>`切换到指定线程。 总结来说,GDB是一个功能强大的调试工具,熟练掌握它的使用能够极大地提升程序员的效率。通过设置断点、查看...
GDB支持调试动态链接的库,通过`sharedlibrary`命令加载库。 4. **远程调试** GDB可以通过网络连接到远程主机进行调试,使用`target remote host:port`命令。 5. **GDB脚本** 可以编写GDB脚本(GDB命令文件)...
开发板没有gdb,写程序老出错而且找不到问题在哪里。于是痛定思痛,决定移植一个gdb。 交叉编译器:arm-none-linux-gnueabi gdb依赖于ncurses,所以先移植ncurses: 下载ncurses-5.9 下载地址:...
15. **调试共享库**:使用`sharedlibrary`命令在调试时载入或卸载共享库。 16. **调试多线程**:GDB支持切换和调试不同线程,`thread`命令用于管理和查看线程。 17. **GDB脚本**:通过编写GDB脚本(GDB Macro或...
Openwrt中通过gdb工具定位内核panic错误位置,快速定位内核内存越界代码位置,节约调试时间。
它允许开发者在程序运行时检查和控制程序状态,如查看内存变量、设置断点、单步执行代码、跟踪调用堆栈等,从而帮助定位和修复程序中的错误。 标题中提到的"包括gdb64.exe和gdb.exe",意味着这个压缩包提供了两个...