编译器指令单步跟踪
⑴ Visual C里有没有像Turbo C里面的单步跟踪的功能
这只是两个不同的编译环境而已
都可以编译C 和C++
语法 是C与C++ 的区别,不是编译器的区别
VC 比Turbo C 更直观,调试更方便 编译的时候 行缩进等都是自动的,可以使得编程的不需要一直使用tab来缩进
不过 VC使用的时候要建立工程 然后文件是包含在这个工程里面
最后直接生成 .exe文件
turbo C 在 C++图形界面和应用Application方面要差的很多
VC很庞大,可以建立任何想要的工程文件 可以创建mfc 等 这是tc所不具备的(好像是,turbo C 用的不是很久没发现这些,具体有没有还得问高手)
最早的时候,我就是使用的turbo c,后来改用 VC++ 个人感觉还是VC好用的多
至于所谓的语法问题 都是一样的 VC可以执行C++ 也可以执行C文件 所以语法根本都是一样的
如果还没解决你的问题,可以加我网络HI账号。
⑵ 在用keil编译程序时,单步跟踪到某一步莫名奇妙的跳转的别的函数去了,有可能是什么原因造成的啊
1:你的程序呗优化了 也就是说你的光标处不是真实编译后的汇编执行的地方
2:你的确在这调用了函数 或者跳转。(要知道很多运算符都是调用的库函数)
⑶ c++.5.0编译器怎么单部调试
调试是为了找错和改错,一般都用单步调式,监视代码的运行。
编译嘛就是运行前的一步操作,利用编译程序从源语言编写的源程序产生目标程序的过程,帮你把源代码翻译成机器能识别的代码。
运行就是产生结果喽。
⑷ 有关C++中单步跟踪的细节
你的程序可能执行进入了一段汇编代码
因为系统的有些函数是无法深入跟踪的
调试器就给你了一段反汇编得到的代码
单步跟踪的一般是利用step over(F10),step into(F11),这两个操作让程序一步步(但这个步长是不固定的,可能是一个基本语句也可能是一个函数)运行。
单步跟踪可以不用打断点,直接在编译程序成功后,执行step over 或step into调试器就会启动。
你继续看调试工具栏上的按钮,你会发现其他的一些非单步的调试方法。[step out(shift+F11), continue(F5)]continue的执行方式是,程序不断执行,直到调试器碰到断点才停止。
建议多利用断点结合F5调试程序,这样效率更高,也对程序员推测BUG具体位置的能力有一定要求
而设置断点在VC中也是有很丰富的条件的,可以有很高级的断点设置方法让程序只在指定的条件下在指定的位置暂停。
⑸ 汇编语言中关于jmp far ptr的一个疑问
首先要明白编译的过程,编译过程中程序那些转移符号不会转换为实际的地址。二是在目标文件记录转移指令相关信息。
其次要明白OS装载程序的过程。OS为了运行程序,OS loader 需要将程序装载到内存。此时程序中每个段在内存中的位置都知道,OS loader根据程序头(program header)中信息将程序中的转移指令地址转换为绝对地址。
当你运行debug调试程序时,你需要知道的是此时被调试的程序已经载入内存了,程序已经在运行了,我们只不过是用了debug的单步跟踪功能使得执行一条指令后回到debug控制。也就是说里面的转移符号都已经确定为实实在在的内存地址。
明白以上几点,需要你了解编译原理、操作系统相关知识。当然这只是大概,具体的细节包括可执行文件结构等等需要自己细心了解。希望对你有所帮助!
⑹ c语言编译器
目前比较流行的包括微软的Visual C++,GCC, Turbo C等。
个人比较推荐GCC,对于初学者而言,虽然Visual C++比较快上手,它帮助开发人员快速新建工程,并添加工程相关代码,只需要在这个平台之上直接开发代码即可,但是这个平台把C语言的一些很关键的东西给省略了,例如Makefile,例如一些基本的库函数的引用之类的。
GCC能让开发人员从编译器的角度出发,把程序的编译,链接等一步一步都完全展示出来,而且也是建立的ANSI C的基础上的,推荐GCC。开发者可以利用一些简单的文本编辑器进行程序的编写,然后通过GCC来编译,这样可以在起步就不收到包括Visual C++的限制,让初学者可以更关注与整个程序的编译过程。
当然如果说到调试方法的话,建议采用Visual C++,它提供的单步跟踪功能确实非常好,不过在GCC下也可以用GDB进行操作,一起看个人的喜好。
⑺ 单片机,什么叫“单步运行程序”
单步运行程序就是你的程序不是一次全部执行完所有的指令,而是一条指令执行完后暂停,然后再单步运行下一条指令,这是调试程序时的一种方法。
⑻ c语言中什么叫做单步调试,步骤是什么
单步调试是指程序开发中,为了找到程序的bug,通常采用的一种调试手段,一步一步跟踪程序执行的流程,根据变量的值,找到错误的原因。
解决这个问题的方法如下:
1、首先需要设置断点的那一行代码的最前面点击下,就会出现一个红色的圆球,代表设置断点成功,下图一共设置了4个断点。
⑼ C语言中 编译器中F10 F9有什么用 设置断点只是为了监听这个数发生 的变化
F9是编译连接的快捷键。F10 是逐行单步跟踪键,在某条语句调用一个函数的时候它不会进入(除非那里设有断点)
设置断点不只是做这个,有时也是为了查找程序错误,比如看一下程序的执行过程是否运行了某段代码等。
⑽ 看到您2009-4-29 17:54提问的关于ARM的问题,我也遇到类似的,已经折腾了几天了,您后来是怎么解决的啊
一般而言,如果在C语言中有对自行发生变化的变量进行条件判断的代码中,必须考虑编译器对这部分代码的“理解”。根据编译器的不同,以及编译器的设置,有时候你的代码编译器并不能完全理解,从而生成了奇怪的代码。
在硬件编程中,通过对标志位的判断来决定下一步的动作是很常见的。我没有看到你的具体代码,一般会类似于
while(1)
if( flag == 1)
break;
这样的代码。建议你的调试方法是,在if(flag==1)这条语句的地方设置断点,然后进行“汇编代码”的单步跟踪(不同的调试开发环境有不同的方法单步跟踪汇编指令)。如果你发现编译器产生的代码根本没有重新获取全局变量flag的值,而仅仅是判断一下是否为1,那么证明是编译器曲解了你的代码含义。还有一种情况是编译器确实重新去获取了全局变量flag的值,而那个值确实没有被设置,那么就要检查中断程序的代码了。
如果是编译器“曲解”了你那段代码的意义,可以通过两个方法来尝试解决:
1,把这段函数的优化关闭。根据编译器的不同,通知编译器关闭对这段函数的优化的指令也不同。简单一点可以在编译器的全局设置上关闭对该项目的全部优化,来进行测试。当然全部关闭优化在实际产品开发上是绝对不允许的。
2,在声明全局变量时,通知编译器不要对这个全局变量进行优化。我没看到你的具体代码,但是如果你的全局变量名叫flag,类型是int,那么可以用下面的方法来声明:
volatile int flag;
也就是在在变量类型int之前加入一个volatile指令。这条指令对大多数ARM的C语言编译器都是有效的。如果编译无法通过,你可以把更详细的信息给我,让我看看。