调试X Server
发现错误
运行X之后出现了错误:
Program received signal SIGSEGV, Segmentation fault.0x00007fbc3336fb63 in ?? () from /lib/x86_64-linux-gnu/libc.so.6(gdb) bt#0 0x00007fbc3336fb63 in ?? () from /lib/x86_64-linux-gnu/libc.so.6#1 0x00007fbc35785087 in RegisterExtensionNames ()#2 0x00007fbc35775599 in AddExtension ()#3 0x00007fbc31501b62 in ?? () from /usr/lib/xorg/modules/extensions/libglx.so#4 0x00007fbc35775720 in ?? ()#5 0x0000000000000168 in ?? ()#6 0x00007fbc35b07600 in ?? ()#7 0x0000000000000000 in ?? ()
查看RegisterExtensionNames出错的位置
- 先查看X进行PID信息
ps aux|grep Xroot 570 0.0 0.1 54100 20976 pts/1 S+ 19:16 0:00 gdb /usr/bin/Xroot 670 0.1 0.2 144108 31652 tty8 ts+ 19:17 0:00 /usr/bin/Xroot 17519 0.0 0.0 22492 1084 pts/0 S+ 19:20 0:00 grep X
- 再查看670的maps
cat /proc/670/maps...7fbc35711000-7fbc358f8000 r-xp 00000000 00:01 117964 /usr/bin/Xorg7fbc35af7000-7fbc35afa000 r--p 001e6000 00:01 117964 /usr/bin/Xorg7fbc35afa000-7fbc35b05000 rw-p 001e9000 00:01 117964 /usr/bin/Xorg7fbc35b05000-7fbc35b15000 rw-p 00000000 00:00 07fbc35dea000-7fbc35e9f000 rw-p 00000000 00:00 0 [heap]7fff642d4000-7fff64330000 rw-p 00000000 00:00 0 [stack]7fff643fe000-7fff64400000 r-xp 00000000 00:00 0 [vdso]ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall]...
其中 0x00007fbc35785087 就包含在了7fbc35711000-7fbc358f8000 r-xp 00000000 00:01 117964 /usr/bin/Xorg里边,说明出错位置在Xorg程序里边
编译与调试Xorg
下载源码:
apt-get source xserver-xorg-core
下载依赖:
apt-get build-dep xserver-xorg-core
生成Makefile:
./autogen.sh
修改Makefile,使之可以GDB调试:
vim Makefile,把CFLAGS和CCASFLAGS选项修改为
CCASFLAGS = -g -O0CFLAGS = -g -O0
编译并进行安装
make -j4 install
安装的位置是/usr/local/bin/Xorg,所以启动的时候需要把startx的路径指向于这里,同时还需要把一些库链接过来:
mv /usr/local/lib/xorg /usr/local/lib/xorg.orgln -svf /usr/lib/xorg /usr/local/lib/xorgln -svf /usr/bin/xkb* /usr/local/bin/
注意,如果修改了Xorg的代码,再编译安装的话,安装之前需要把 /usr/local/lib/Xorg 这个链接删掉,避免覆盖了原有的文件
或者手工拷贝替换的文件,比如make -j4 && cp hw/xfree86/Xorg /usr/local/bin/Xorg,这样子就可以继续测试了;
调试:
cgdb /usr/local/bin/Xorgrunbt
发现问题出现在了 strtol里边,接着调试glibc;

先不调试glibc,因为它不太可能出现Bug,问题现在定位到是GLX初始化时出现的错误
b RegisterExtensionNames if strcmp(extEntry->name, "GLX") == 0
修改全部的Makefile文件,让它们可以进行debug
find . -name Makefile -print -exec sed -i 's/-g -O2/-g -O0/g' {} \;
最后找丁技术确认了这个安装这个GLX时,libglx.so可能会去修改寄存器fs(或者是说它的进入初始化的姿势不太一样?)的内容,这个libglx.so是由NVIDIA提供的,暂时无法修改.
调试X Server的更多相关文章
- 使用WinDbg调试SQL Server查询
上一篇文章我给你介绍了WinDbg的入门,还有你如何能附加到SQL Server.今天的文章,我们继续往前一步,我会向你展示使用WinDbg调试SQL Server查询需要的步骤.听起来很有意思?我们 ...
- 使用WinDbg调试SQL Server——入门
这篇文章我想探究下SQL Server里完全不同的领域:如果使用WinDbg(来自针对Windows的调试工具)调试SQL Server.在我们进入枯涩细节之前,我想详细解释下为什么选择这样晦涩的话题 ...
- Eclipse调试cas server 3.5.2.1
由于在配置CAS+LDAP总是报错,决定Eclipse调试cas server,跟踪问题出在哪里? ================================================== ...
- 如何设断点????-----使用WinDbg调试SQL Server查询
http://www.cnblogs.com/woodytu/p/4665427.html http://www.sqlservercentral.com/blogs/aschenbrenner/20 ...
- VS调试SQL Server存储过程
1.打开VS,视图-->SQL Server对象资源管理器.(我用的是VS2012) 2.添加链接,连接到数据库. 3.选择要调试的存储过程,右键,选择调试过程或者执行过程. 4.填写存储过程所 ...
- Visual Studio 2017 调试 windows server 2016 Docker Container
网上很多文章都是在win10下,用Docker for windows工具进行Docker的安装部署的.用知道windows server 2016已经原生支持Docker了,其windows Con ...
- 调试SQL Server的存储过程及用户定义函数
分类: 数据库管理 2005-06-03 13:57 9837人阅读 评论(5) 收藏 举报 sql server存储vb.net服务器sql语言 1.在查询分析器中调试 查询分析器中调试的步骤如下: ...
- IDEA远程调试Ambari Server
1.配置端口 Ambari Server默认配置了服务端的debug参数,端口为5005.如果要修改端口,可以在/usr/sbin/ambari_server_main.py文件中对应地方修改,直接改 ...
- VS 调试Window Server方法
在需要调试的地方加 Debugger.Launch();然后在本机安装服务并启动即可进入
随机推荐
- rocksdb编译测试的正确姿势
需要先安装 gflags 在进行 make db_bench 不然运行 db_bench 会出现 Please install gflags to run rocksdb tools 错误 bench ...
- c#控制IE浏览器自动点击等事件WebBrowser,mshtml.IHTMLDocument2 .
// c#控制IE浏览器自动点击等事件WebBrowser,mshtml.IHTMLDocument2 分类: c# 2013-02-06 15:18 3008人阅读 评论(0) 收藏 举报 可以实现 ...
- [vb.net]XML File Parsing in VB.NET
Introduction Parsing XML files has always been time consuming and sometimes tricky. .NET framework p ...
- 用JS制作简易的可切换的年历,类似于选项卡
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 30.0px Consolas; color: #2b7ec3 } p.p2 { margin: 0.0px ...
- log4j.properties example
google search log4j.properties example Output to Console # Root logger option log4j.rootLogger=INFO, ...
- Digit Root ---- 余九定理
题目:hdu1013, hdu1163, 51nod1116. or dr(n) = (n-1)%9+1. 其中,n-1是为了将结果0-8匹配到1-9. Reference: [1] https:// ...
- PHP会话处理相关函数介绍
PHP会话处理相关函数介绍 提交 我的评论 加载中 已评论 PHP会话处理相关函数介绍 2015-03-23 PHP100中文网 PHP100中文网 PHP100中文网 微信号 功能介绍 互联网开发者 ...
- 安装mysql数据库中的技巧、错误排查以及实用命令(持续更新)
针对解压版本5.7.16(博主使用的这个版本.在某些低版本中部分命令失效) 一.初始化data目录(解压版解压后没有data目录) mysqld --initialize-insecure --use ...
- t-sql或mssql怎么用命令行导入数据脚本
osql简单用法:用来将本地脚本执行,适合sql脚本比较大点的情况,执行起来比较方便 osql -S serverIP -U sa -P 123 -i C:\script.sql serverIP数据 ...
- 转:判断DATASET是否为空
http://blog.sina.com.cn/jiangshuqin2010 1,if(ds == null) 这是判断内存中的数据集是否为空,说明DATASET为空,行和列都不存在!! 2,if( ...