configure: error: `target_alias' has changed since the previous run:
configure: former value: i686-pc-linux-gnu
configure: current value: i386-rtems
configure: error: changes in the environment can compromise the build
configure: error: run `make distclean' and/or `rm ./config.cache' and start over
说的很明白了。
如果看不懂,那么最简单的办法就是删了这个源代码后重新解压缩。
㈡ iOS 编译报错怎么办
1.编译iPad真机时,选择了 Architetures:Standard(armv6) BaseSDK:iPhoneDevice3.2 TargetDeviceFamily:iPad.
若编译出现如下错误:
Command /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc-4.2 failed with exit code 1
则修改 GCC4.2CodeGeneral区域中的ComplieForThumb为非选中.
已经有了开发者证书及私钥后,可直接在越狱的手机上调试.
2. 编译链接时, "_OBJC_CLASS_$_xxx", referenced from:可能需要重新建立某个类的文件.
或者:选择项目名,在detail列表中的target列(显示为一个又圆圈),把这个文件的复选选中,或者再次选中.以把它加入到这个target里面来.
3.在sdk4.0及以上使用RegexKitLite报'captureCount' was not declared in this scope错误,是在非.m文件中使用了它的原因.
4.there is no sdk with the name or path.
从网上down的开源代码,结果运行的时候常出现这样的错,并且在deployment中没有iosdeploymenttarget选项.
尝试 Project/Edit Active Target/ 及 Set Active SDK菜单项,来回切换一下Active Configuration。
5. EXEC_BAD_ACCESS,EXC_BAD_INSTRUCTION错误,意味着这个app有内存管理的问题,一般是因为访问野指针对象造成的。
一个和内存相关的崩溃一般很难定位到源代码,因为这个恶魔可能很早就在程序中做了坏事了。假如一段有问题的代码混乱了内存结构,这样产生的蝴蝶效应可能会在之后很久才表现出来,并且总在不同的地方。所以,若有指针类型出现了不可能的变化,很可能就是因为内存结构被野指针调用混乱了。
修复一些警告后,可能就能预防一些内存错误。警告在左边靠近行号的黄色三角指出一个编译警告,你点击那个黄色的三角形,xcode可能会弹出一个“Fix-it”的建议。
EXC_BAD_ACCESS崩溃不像SIGABRT,将不会得到很明朗的错误消息。然而可以使用一个让人看到曙光的调试工具:Zombies!死亡对象工具。打开这个项目的scheme editor,选择Run 选项,然后选择Diagnosics标签。勾上Enable Zombie Objects选项。当这个zombie工具被启用之后,即使这个对象被释放了,这个对象的内存也不会被清理。所以,那块内存将会被标记为“长生不死的”。假如你试着之后又去使用这块内存,这个app能够意识到你的错误操作,并且app将会抛出“messagesent to daellocated instance”错误并且终止运行。
在工程中加入NSZombieEnabled 环境变量,并设为启用,则在 EXC_BAD_ACCESS 发生时,XCode 的 Console 会打印出问题描述中,设置方法:双击Executables 下的 可执行模组,在弹出窗口中,Variables to be set in the environment,添加 NSZombieEnabled,并设定为 YES,点击选中复选框启用此变量。
可以再加入 MallocStackLogging 来启用malloc记录,以获得更多的提示来帮助定位问题。
在gdb窗口输入 (格式: shell malloc_history <id> <address>) shellmalloc_history1436 0x5f7fcf0, 也可以在终端中去运行 就要去掉以上的shell 指令 如 malloc_history <id> <address>
应该仅当需要调试内存时,才设置上述环境变量。
注意一点:不应该一直启用zombie objects。因为这个工具将永远不会释放内存,只是简单标记一下这个内存是不死的,你最终将会在某个时候耗尽所有的内存,因为所有分配过的内存都不会得到重用。因此应该在排查内存相关的错误的时候才开启zombie objects,其他时候应该关闭它。
在xcode4中,To edit environment variables, go to Menu Proct / Edit Scheme…, select the desired configuration (you probably want 'Run') from the left sidebar first and then click on the Arguments tab. Environment variables are configurable there.
6.运行一个IPhone程序时,弹出窗口说“程序运行失败,预置描述文件已过期” 。 解决办法是,在Xcode中, window-> Orgnazier -> 你的iphone ->删除带有红*的该程序之前的Profile 。 然后从Xcode运行该程序.
7.真机编译时报 Code Sign error: The identity doesn't match any valid certificate/private key pair in the default keychain
修改工程和Targets的get infouild 中的code signing identity为空
8.调试打印
CFShow(coreFoundationThingy) will print out a description of coreFoundationThingy to the console. Output looks something like: {value = w:1186.000000 h:687.000000 type = kAXValueCGSizeType}
If NSLog() is printing something out as an NSCFType, try CFShow().
9. 编译时报 Command /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/clang failed with exit code 1,修改C/C++ Compiler Version为gcc4.2
10.this class is not key value coding-compliant for the key viewController
可能在创建了一个基于view的工程,而后把生成的viewcontroller删除了,但是在.xib中还有对它的引用,在IB中直接用delete键删除掉它就行了。
11.这台电脑上已经存在一个名为“embedded.mobileprovision”的预置文件,您是否要替换么?
http://blog.sina.com.cn/s/blog_6907b67f0100o2vw.html
12.真机调试时报failed to upload *.app
http://hi..com/%CB%E6%B7%E7_1989/blog/item/9649f49f805f05aec8eaf466.html
http://www.shouyanwang.org/thread-462-1-1.html
13.记的release时,先置delegate为nil。
一个节点不应该保留任何对不属于它的节点的引用。
14.模拟器
将xcode升级到4.3.1以后发现,ipad的模拟器,没有Home键了。Command+Shift+H就可以实现类似点击Home键的效果了。
㈢ gdb加载动态库成功,但是不能显示动态库中的源码(gdb+gdbserver)
因为具体的给的不够详细,不清楚你遇到的情况。
如果仅从断点上看,应该就是CApartment.cpp:55
但是,如果你的程序编译的时候,不是-O0,那个可能回不到源码,只能看汇编。
1、有时候(很少)就是编译器的错误。
2、还有可能就是你调试的程序和你的源码不匹配
3、你的程序已经崩溃了,破坏了堆栈或者GDB需要的数据。
4、这个地方有特殊的定位信息
5、其他情况,还是比较多的,经常遇到。
如果懂汇编,最好看看汇编。
如果不懂,看看那一条语句是最后一条能够跟踪的语句。
仔细看看最后一条语句的所有变量,应该能猜出来是什么问题。
㈣ gdb变量不存在
你问的gdb变量不存在的原因吧。在用GDB调试被优化过的程序时,可能会发生某些变量不能访问,或是取值错误码的情况。
优化程序会删改程序,整理程序的语句顺序,剔除一些无意义的变量等,所以在GDB调试这种程序时,运行时的指令和你所编写指令就有不一样,也就会出现你所想象不到的结果。对付这种情况时,需要在编译程序时关闭编译优化。
gdb是UNIX及UNIX-like下的调试工具。该工具能启动程序,可让被调试的程序在所指定的调置的断点处停住(断点可以是条件表达式),当程序被停住时,可以检查此时程序中所发生的事,还可以改变程序,将一个BUG产生的影响修正从而测试其他BUG。
㈤ g++编译程序,运行报错,怎么定位错误代码
在g++编译选项中加上-g生成调试信息,然后用gdb运行生成的可执行文件即可进入调试。gdb的各种命令可以自己搜索。
建议使用Visual Studio等IDE来写代码和调试运行,这样比你手动操作编译器和调试器要方便得多。
㈥ Cannot find bounds of current function是怎么回事
Cannot find bounds of current function是找不到当前函数的界。
1、gdb找不到应用程序的调试符号,检查编译选项已经添加了调试相关选项。使用file命令检查加载的文件:$ file httpd_sequential
httpd_sequential: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, not stripped。
2、编译应用程序的gcc与调试程序的gdb不匹配,arm-eabi-gdb需要的是arm-eabi-gcc编译生成的映像文件。gdb不检查ELF文件头给出错误报告。
3、使用正确的gcc编译其编译后重新使用file命令检查文件类型:$ file httpd_sequential
httpd_sequential: ELF 32-bit LSB executable, ARM, version 1 (SYSV), statically linked, not stripped。
4、在嵌入式系统开发过程通常需要交叉编译,必须小心处理所使用的编译器和调试器,特别是在使用Eclipse等集成开发环境的情况下要仔细核对开发环境使用的是那个编译器和调试器。默认情况下Eclipse调用的是本地编译器和调试器而不是交叉编译器。
㈦ LINUX环境下编译错误 not in executable format: 不可识别的文件格式
产生core文件是程序崩溃时留下的信息,如果想要查看core文件的内容,请执行GDB跟踪程序,命令如下:
gdb ./yourfile core.5245
根据你给出的命令和gdb错误提示,可以断定,你gdb命令用错了,第二个参数是你的可执行程序,比如,你的可执行程序叫DataIntegrityCheck,第3个输入项才是core文件的名字。那么整个命令应该是
cd /home/liubo/DataIntegrityCheck/bin
gdb ./DataIntegrityCheck core.5245
DataIntegrityCheck这里一定是你编译好的可执行程序,我只是举个例子而已。如果你编译没有指定,它甚至可以是a.out
你再试试吧。
core文件,改成.c是没有用的
㈧ linux gdb调试问题
出现此错误的原因主要是gcc4.9生成的调试信息是dawnfs4,而gdb7.0支持的是 dawnfs2
这个问题其实是编译环境的问题,可以更改gcc和gdb的版本,这需要去寻找合适的版本。当然也可以给gcc增加编译参数,使其生成dawnfs2调试信息,主要参数为-gdwarf-2 -gstrict-dwarf,做法如下:
在.bashrc中加入alias gcc='gcc -gdwarf-2 -gstrict-dwarf',重启终端使其生效
这样gdb可以使用,也不会出现上面的错误。
㈨ 用逆向插入法建立一个双链表,编译时提示“段错误”,用GDB调试提示错误在main()、creat(),还请高手指点
逆向插入是什么意思?
是插到尾后?插到尾后?插到头前?插到头后?
D_list *creat()
{
D_list *head;
D_list *newd;
int i;
head = (D_list*)malloc(LEN);
if(head == NULL) return NULL;
head -> next = NULL;
head -> prior = NULL;
for(i = n; i > 0; -- i )
{
newd = (D_list*)malloc(LEN);
if(newd == NULL) return NULL;
newd -> data = i * 3;
newd -> next = head -> next;
newd -> prior = head;
head -> next = newd;
}
return head;
}
另外if(i == n)是要处理什么?我怎么觉得没用