你好,请问linux下程序编译遇到的那种segment fault你怎么解决的啊 看他们说的那个#objdump -D XXX >debug

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了你好,请问linux下程序编译遇到的那种segment fault你怎么解决的啊 看他们说的那个#objdump -D XXX >debug相关的知识,希望对你有一定的参考价值。

进入debug文件看不懂啊

objdump -D XXX >debug
这个是将可执行程序反汇编的结果存入了debug文件,需要有汇编语言基础才能看懂。

你编译程序的时候就遇到segment fault?还是运行程序的时候遇到的?
一般用 gdb 跟踪调试就行了(用gcc编译的时候需要加上 -g 选项,这样可执行程序中才包含符号表,才能将源码与指令对应起来)。追问

程序运行时候出现的,看debug文件时候全是指令,是不是出错位置显示的是bad指令啊 不会定位到出错位置

追答

一般不需要用 objdump 反汇编的,而且汇编里面没有 bad 这条指令吧。
直接按我上面说的用 gdb 调试C语句就可以。调试过程中用 “print 变量名” 打印变量值,“info locals” 命令查看所有局部变量,x 命令打印指定存储单元的内容。
更多技巧,还是去网上搜一下 gdb 的具体用法吧,实在太多了。
总之,这种内存错误不可能一眼就看出的,需要静下心来慢慢调试。
或者,走读代码也是一种方法。自己从头看看代码,说不定就能看出问题来了。写代码时的一个小小失误,要找出来常常需要花费成倍的时间,一点不奇怪。
看不到代码,不好具体说 ;-)

参考技术A 只要程序运行的适合才会出现segment fault,这种一般情况下是内存越界引起的。
objdump是反汇编用的
编译的适合加个用CFLAGS=-g make
编译出可以debug的版本,用gdb调试
gdb的用法可以去搜

你好,我的在KALI linux安装RTL8192的驱动时编译遇到点问题

求大神帮忙看一下,我是新手

他的书我也看过,你的问题应该是linux版本问题吧,记得编译驱动程序的内核和insmod时候使用的内核需要一样,
例如:我当时使用ubuntu,里边自己编译的是linux-2.6.32.4吧(记不清楚了),编译完内核之后,把内核移植到开发板,然后使用这个内核编译你的hello.c,编译生成KO文件,移动到开发板的文件系统,然后insmod就OK了,

注意需要有ARM开发板

他的书需要有一定的基础才能看懂,另外推荐韦东山的书和第一期免费视频很不错,百问网上有,韦东山的网站
参考技术A 没有声明那个函数,感觉是你的传进去的linux version是错的,手动指定你的linux版本或者看看makefile里面是怎么处理没有输入linux版本情况下穿进去的是什么?追问

请问是这个语句吗?我不懂C语言,求大师指点

追答

这段的作用的判断CONFIG_PLATFORM_i386_PC有没有选上,如果是y,就传入ARCH,SUBARCH等变量的值,你知道你要传入的值是什么吗?你注意看看那个KVER在编译的时候是不是正确的

追问

我仔细看了一下这个驱动好像只支持2.6.18~3.9的内核,而我的内核是3.14的,我是不是该换个内核啊?

以上是关于你好,请问linux下程序编译遇到的那种segment fault你怎么解决的啊 看他们说的那个#objdump -D XXX >debug的主要内容,如果未能解决你的问题,请参考以下文章

你好,我的在KALI linux安装RTL8192的驱动时编译遇到点问题

记录下 QT Linux 静态编译遇到的坑

请问linux下,gcc编译程序的过程(从读取源文件到制作可执行程序中间所有过程,越详细越好)

你好,我想请问下,如何用ExtJs Grid做一个双击事件。就好比QQ邮箱,双击邮件名称,在那个frame显示内容

请问一下wpf能否实现消息提示框 就像qq消息的那种 右下角弹出 ?能的话 请贴出代码

请问用Linux做一个操控的嵌入式系统,怎么搭建平台好?