你好,请问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 的具体用法吧,实在太多了。
总之,这种内存错误不可能一眼就看出的,需要静下心来慢慢调试。
或者,走读代码也是一种方法。自己从头看看代码,说不定就能看出问题来了。写代码时的一个小小失误,要找出来常常需要花费成倍的时间,一点不奇怪。
看不到代码,不好具体说 ;-)
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的驱动时编译遇到点问题
请问linux下,gcc编译程序的过程(从读取源文件到制作可执行程序中间所有过程,越详细越好)
你好,我想请问下,如何用ExtJs Grid做一个双击事件。就好比QQ邮箱,双击邮件名称,在那个frame显示内容