gdb怎么更改调试属性中的工作目录

如题所述

第1个回答  2016-10-24
一、修改变量值
修改被调试程序运行时的变量值,在GDB中很容易实现,使用GDB的print命令即可完成。如:

(gdb) print x=4

x=4这个表达式是C/C++的语法,意为把变量x的值修改为4,如果你当前调试的语言是Pascal,那么你可以使用Pascal的语法:x:=4。

在某些时候,很有可能你的变量和GDB中的参数冲突,如:

(gdb) whatis width
type = double
(gdb) p width
$4 = 13
(gdb) set width=47
Invalid syntax in expression.
因为,set width是GDB的命令,所以,出现了“Invalid syntax in expression”的设置错误,此时,你可以使用set var命令来告诉GDB,width不是你GDB的参数,而是程序的变量名,如:

(gdb) set var width=47

另外,还可能有些情况,GDB并不报告这种错误,所以保险起见,在你改变程序变量取值时,最好都使用set var格式的GDB命令。

二、跳转执行
一般来说,被调试程序会按照程序代码的运行顺序依次执行。GDB提供了乱序执行的功能,也就是说,GDB可以修改程序的执行顺序,可以让程序执行随意跳跃。这个功能可以由GDB的jump命令来完:

jump <linespec>
指定下一条语句的运行点。<linespce>可以是文件的行号,可以是file:line格式,可以是+num这种偏移量格式。表式着下一条运行语句从哪里开始。

jump <address>
这里的<address>是代码行的内存地址。

注意,jump命令不会改变当前的程序栈中的内容,所以,当你从一个函数跳到另一个函数时,当函数运行完返回时进行弹栈操作时必然会发生错误,可能结果还是非常奇怪的,甚至于产生程序Core Dump。所以最好是同一个函数中进行跳转。

熟悉汇编的人都知道,程序运行时,有一个寄存器用于保存当前代码所在的内存地址。所以,jump命令也就是改变了这个寄存器中的值。于是,你可以使用“set $pc”来更改跳转执行的地址。如:

set $pc = 0x485

三、产生信号量
使用singal命令,可以产生一个信号量给被调试的程序。如:中断信号Ctrl+C。这非常方便于程序的调试,可以在程序运行的任意位置设置断点,并在该断点用GDB产生一个信号量,这种精确地在某处产生信号非常有利程序的调试。

语法是:signal <singal>,UNIX的系统信号量通常从1到15。所以<singal>取值也在这个范围。

single命令和shell的kill命令不同,系统的kill命令发信号给被调试程序时,是由GDB截获的,而single命令所发出一信号则是直接发给被调试程序的。

四、强制函数返回
如果你的调试断点在某个函数中,并还有语句没有执行完。你可以使用return命令强制函数忽略还没有执行的语句并返回。

return
return <expression>
使用return命令取消当前函数的执行,并立即返回,如果指定了<expression>,那么该表达式的值会被认作函数的返回值。

五、强制调用函数
call <expr>
表达式可以是函数,以此达到强制调用函数的目的。并显示函数的返回值,如果函数返回值是void,那么就不显示。

另一个相似的命令也可以完成这一功能——print,print后面可以跟表达式,所以也可以用他来调用函数,print和call的不同是,如果函数返回void,call则不显示,print则显示函数返回值,并把该值存入历史数据中。

在不同语言中使用GDB
——————————
GDB支持下列语言:C, C++, Fortran, PASCAL, Java, Chill, assembly, 和 Modula-2。一般说来,GDB会根据你所调试的程序来确定当然的调试语言,比如:发现文件名后缀为“.c”的,GDB会认为是C程序。文件名后缀为“.C, .cc, .cp, .cpp, .cxx, .c++”的,GDB会认为是C++程序。而后缀是“.f, .F”的,GDB会认为是Fortran程序,还有,后缀为如果是“.s, .S”的会认为是汇编语言。本回答被网友采纳

在WINDOWS如何打开GDB调试C++程序
1. 我的电脑->管理...在path那一项后面添加你DEV-C++ Bin目录的路径,如:E:\\Program Files\\DEV-CPP\\Bin (你自己的路径)2. CMD命令行,输入: set path=%path%;E:\\Program Files\\DEV-CPP\\Bin 这样之后,命令行就可以直接调用gdb命令了。其它的,就是跟gdb的语法相关的了。

GDB调试指南-断点设置
首先,了解一下为什么要设置断点。通过在特定行或函数处设置断点,程序在运行到这些位置时会自动暂停,为我们提供了观察和分析的时机。使用info breakpoints命令,你可以查看当前所有已设置的断点及其属性。断点设置有多种方式,适合不同的调试场景。例如,可以直接根据行号设置,如在第10行设置断点,或者根据...

gdb怎样修改进程内存的,用C怎样实现
GDB调试:可以认为自己开了一个池子,将需调试程序加到这个池子里,它就可以操作池子里面的所有东西,只要知道对应地址。

如何在Windows的命令行下进行程序编译和gdb调试
1、选择计算机,右键,选择“属性”2、“高级系统设置” –> “环境变量”3、选择“环境变量”里面的“系统变量” ,选择path, 编辑 4、添加环境变量。注意:最好不要动原来的东西,在原来的东西的基础上在前面或后面加上一个分号,然后把Dev C++安装目录下的MinGW64\/bin文件夹的路径复制到环境变...

如何在GDB中查看变量的值
当执行到某断点时,在GDB窗口中使用po就可以查看变量.(po = print object)1)查看String 或其它变量。po 变量名2)查看某个Property。比如要查看item变量的name属性。po [item name] 注意,po item.name是不工作的。3)查看数组

qt调试无法开始 求助
在Qt项目中,需要在.pro文件中添加“CONFIG += debug”,以确保配置为调试模式,并且需要添加“QMAKE_CXXFLAGS += -g”,以确保生成可调试的二进制代码。3. 未安装必要的插件。Qt Creator中需要安装适当的调试插件,例如“Qt Creator CDB Debugger”或“Qt Creator GDB Debugger”,以提供调试器支持。

linux系统常用操作命令
4、linux常用命令: pwd命令 该命令的英文解释为print working directory(打印工作目录)。输入pwd命令,Linux会输出当前目录。 cd命令 cd命令用来改变所在目录。5、linux命令在系统中有两种类型:内置Shell命令和Linux命令。模式切换 由图形到字符#logout或init3。由字符到图形界面init5。退出或exit或ctrld...

文件属性里的打开方式搞乱了怎么办?
1.右键单击文件-打开方式-选择程序-选择你想用的程序-勾选“始终使用选择的程序打开文件”-确定。2.打开 我的电脑 --工具--文件夹选项--查看--隐藏已知文件类型的扩展名 把钩去掉就可以了。你可以马上可以看到它是什么后缀了,你可以自己改更改它了。以下是常见文件打开方式可以对你会有很多的...

用arcmap打开的.mxd文件,存的是路线,如何把路线的GPS位置信息导出来_百 ...
一、使用折点转点工具,将道路从线状转为点集。二、打开点集的属性表,新建两个字段,名称为X坐标跟Y坐标,类型为文本,长度为20。分别在X坐标字段点击右键,计算几何,选择点的X坐标,确定后原来空白的字段会填满数字,Y坐标字段也这样处理,选择点的Y坐标。三、在属性表的菜单里,选择导出为dbf表格...

第19篇:C++多态中的类型转换的内存原理
这种现象在使用GDB等调试器进行内存分析时可能难以察觉,因为C++编译器会采取隐蔽措施来避免直接暴露此类信息。理解这些类型的转换和内存操作有助于深入理解C++编译器在继承中的底层机制。动态绑定的操作隐含的类型转换是安全的,因为Upcast并不会修改派生类的内容,只是复制了派生类中所持有的基类实例副本。

相似回答