GDB源代码查找路径
在gdb程序的时候,有时候会发现源代码文件找不到,对于那些带调试信息的系统库或者第三方库,很多时候当你真正想gdb去追他源代码的时候你会发现gdb根本找不到这些源代码路径。这个时候有两种选择:
【1】如果gdb这个时候告诉你找不到这个带调试信息库的源文件路径,此时给出的路径地址是绝对路径,比如
/home/rickyk/qt-4.8./src/corelib/tools/qstring.cpp: 没有那个文件或目录
这种提示的,你就应该用gdb提供的
set substitute-path
这个其实很好理解,就是替换规则,你如果想查看当前的替换规则,你可以
show substitute-path
比如此时我们需要qstring.cpp这个文件,但由于某种原因,目前我们不能在/home/rickyk/qt-4.8.6/src/corelib/tools/qstring.cpp中找到,但我们确可以在/home/rickyk/qt-everywhere-opensource-src-4.8.6/src/corelib/tools/qstring.cpp中找到,我们就
set substitute-path /home/rickyk/qt-4.8. /home/rickyk/qt-everywhere-opensource-src-4.8.
这是什么意思?其实就是让gdb在看到/home/rickyk/qt-4.8.6的时候他会做自动替换成/home/rickyk/qt-everywhere-opensource-src.4.8.6,也就是说gdb可以正确知道这个文件了。此时我们再show substitute-path可以看到此时的转换规则已经被我们加进去了
(gdb) show substitute-path
List of all source path substitution rules:
`/home/rickyk/qt-4.8.' -> `/home/rickyk/qt-everywhere-opensource-src-4.8.6'.
【2】如果此时的gdb弹出的错误信息不是绝对路径的概念,而是相对路径的概念
./a.cpp 没有那个文件或目录
那么此时你可以用gdb的第二个源代码路径法宝----directory(dir) dirName来指定,也就是说如果我们此时的a.cpp不在当前目录下,而是在当前目录下的bak文件夹下,我们只要
dir bak
这个时候我们的gdb就会把你加进去的dir整个替换到相对路径的前面,自己做拼接,也就是说,现在的./a.cpp变成了./bak/a.cpp。
注意两者的差别,对于绝对路径来说,你需要给出替换规则给他做字符串替换,对于相对路径来说,你需要给他目录来让他做拼接,也有点prefix的意思,这里的prefix由你给出,但相对路径整体结构由gdb给出,然后完成拼接操作。
PS: 同时你需要在.gdbinit上加上一句
set auto-load safe-path /
这样你才能让gdb去正确的在别的目录进行读取源代码 。(这里面的原因我目前不是很清楚,总之就是我一开始使用set substitute-path的时候怎么用都不成功,加上这句之后才可以,有同学知道的也可以告诉我原因),我看了下auto-load的介绍
set auto-load safe-path[directories]-
Set the list of directories (and their subdirectories) trusted for automatic loading and execution of scripts. You can also enter a specific trusted file. Each directory can also be a shell wildcard pattern; wildcards do not match directory separator - see
FNM_PATHNAMEfor system functionfnmatch(see fnmatch). If you omit directories, ‘auto-load safe-path’ will be reset to its default value as specified during gdb compilation.The list of directories uses path separator (‘:’ on GNU and Unix systems, ‘;’ on MS-Windows and MS-DOS) to separate directories, similarly to thePATHenvironment variable.
- 感觉这是在设置自动可以读取的script路径,不知道这对于set substitute-pah有什么影响。按照参考链接的说法,设置这个命令应该是让gdb去读取可信赖路径的.gdbinit才对。
参考链接: http://stackoverflow.com/questions/16595417/loading-gdbinit-from-current-directory
https://vecr.ece.villanova.edu/vecr/doc/gdb/Auto_002dloading-safe-path.html
GDB源代码查找路径的更多相关文章
- Linux下动态库查找路径的问题
说到和动态库查找路径相关的问题,总体上可以分为两类: 第一类: 通过源代码编译程序时出现的找不到某个依赖包的问题,而如果此时你恰好已经按照它的要求确确实实.千真万确.天地良心地把依赖库给装好了, ...
- 谈谈Linux下动态库查找路径的问题 ldconfig LD_LIBRARY_PATH PKG_CONFIG_PATH
谈谈Linux下动态库查找路径的问题 ldconfig LD_LIBRARY_PATH PKG_CONFIG_PATH 转载自:http://blog.chinaunix.net/xmlrpc.ph ...
- 谈谈Linux下动态库查找路径的问题
学习到了一个阶段之后,就需要不断的总结.沉淀.清零,然后才能继续"上路".回想起自己当年刚接触Linux时,不管是用源码包编译程序,还是程序运行时出现的和动态库的各种恩恩怨怨,心里 ...
- [转]谈谈Linux下动态库查找路径的问题
http://blog.chinaunix.net/uid-23069658-id-4028681.html 学习到了一个阶段之后,就需要不断的总结.沉淀.清零,然后才能继续“上路”.回想起自己当年刚 ...
- 转:谈谈Linux下动态库查找路径的问题
http://blog.chinaunix.net/uid-23069658-id-4028681.html 学习到了一个阶段之后,就需要不断的总结.沉淀.清零,然后才能继续“上路”.回想起自己当年刚 ...
- Linux动态库的查找路径
前两天写了一个动态库,然后试图编译到程序里面去运行,结果发现编译的时候通过gcc的-L参数来指定路径仅仅能让编译通过,运行时还是会出问题的. 比如下面这个例子: main.c是主程序,sum.c中间含 ...
- 基于visual Studio2013解决面试题之0205查找路径
题目
- C语言头文件、库文件的查找路径
在 程序设计中,文件包含是很有用的.一个大的程序可以分为多个模块,由多个程序员分别编程.有些公用的符号常量或宏定义等可单独组成一个文件,在其它文件的开头用包含命令包含该文件即可使用.这样,可避免在每个 ...
- 十:jinja2模板查找路径
jinja2用于渲染模板 查找路径 1.默认从项目根目录下的templates下面找指定的html文件 也可以往下新建路径 2.指定自定义路径 在Flask的源码中,指定了默认路径为templates ...
随机推荐
- C语言调用汇编实现字符串对换
1. 前面配置arm交叉编译环境. 2. 配置好qemu-arm C语言代码string-switch.c: #include <stdio.h> #include <stdlib. ...
- weekend110(Hadoop)的 第三天笔记
(2015年1月17日) 课程目录 01-hdfs源码跟踪之打开输入流 02-hdfs源码跟踪之打开输入流总结 03-mapreduce介绍及wordcount 04-wordcount的编写和提交集 ...
- hdoj 3952 World Exhibition
World Exhibition Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- 捕获 PHP 致命错误 Fatal Errors
register_shutdown_function()函数都将会你的程序执行完后执行,无论你的程是否运行正常. 所以,在这个函数前执行任何操作我们都要检查是否真的有致命错误出现.如果出现致命错误,我 ...
- java集合类之TreeMap
转自:http://blog.csdn.net/chenssy/article/details/26668941 TreeMap的实现是红黑树算法的实现,所以要了解TreeMap就必须对红黑树有一定的 ...
- NSLayoutConstraint-代码实现自己主动布局的函数使用方法说明
[NSLayoutConstraint constraintWithItem:view1 attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelat ...
- [TypeScript] Installing TypeScript and Running the TypeScript Compiler (tsc)
This lesson shows you how to install TypeScript and run the TypeScript compiler against a .ts file f ...
- java连接oracle的简单实例
连接oracle的时候,要导入oracle驱动的jar包. 连接的时候,有statement和preparedstatement两种,从代码中可以看出不同. example: package com. ...
- DS_Store
.DS_Store (英文全称 Desktop Services Store)[1] 是一种由苹果公司的Mac OS X操作系统所创造的隐藏文件,目的在于存贮文件夹的自定义属性,例如文件们的图标位置或 ...
- PHP中的session会话创建打印释放销毁;
PHP Session PHP session 变量用于存储关于用户会话(session)的信息,或者更改用户会话(session)的设置.Session 变量存储单一用户的信息,并且对于应用程序中的 ...