📄 kdevelop-manual-12.html
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"><HTML><HEAD> <META NAME="GENERATOR" CONTENT="LinuxDoc-Tools 0.9.21"> <TITLE>Kdevelop使用手册: 内置调试器</TITLE> <LINK HREF="kdevelop-manual-13.html" REL=next> <LINK HREF="kdevelop-manual-11.html" REL=previous> <LINK HREF="kdevelop-manual.html#toc12" REL=contents></HEAD><BODY><A HREF="kdevelop-manual-13.html">Next</A><A HREF="kdevelop-manual-11.html">Previous</A><A HREF="kdevelop-manual.html#toc12">Contents</A><HR><H2><A NAME="The Internal Debugger"></A> <A NAME="s12">12.</A> <A HREF="kdevelop-manual.html#toc12">内置调试器</A></H2><H2><A NAME="ss12.1">12.1</A> <A HREF="kdevelop-manual.html#toc12.1">设置</A></H2><P>KDevelop的缺省设置是使用内置的调试器.你可以通过选择选项的"配置KDevelop" 菜单来改变.</P><P>如果你要使用其它的调试器,点击"使用外部调试器"并输入其名字.参考你的调试器的文档看它是怎样运行的.</P><P>如果你选择内置调试器,还有一些附加的选项:</P><P><UL><LI>显示静态成员: 显示静态成员使gdb在kde和qt中产生数据时变慢.它会改变QString及其友类所依赖的'签名'.但是如果你的确需要调试这些值就选上它.</LI><LI>显示mangled名字: 在显示反汇编代码时,你可以选择是看mangled名字,当然,非mangled的名字更易读.</LI><LI>在载入库中设置断点: 这将尝试在载入库中设置断点.如果GDB没有看到通过'dlopen'方式载如的库,那么就拒绝在该处设置断点.我们可以让gdb停在载入的库中并设置断点.参看<A HREF="#Shared libraries and breakpoints">共享库与断点</A>以获取更进一步的信息,如果你不是用"dlopen"方式载入库,关闭此选项</LI><LI>允许浮动的工具条: 作为对菜单和按钮的补充,它使你能够使用浮动的工具条来控制调试器.该工具条在调试GUI应用程序的时候尤为有用.具体的细节参见<A HREF="#The floating toolbar">浮动工具条</A>.</LI><LI>允许为程序的I/O使用分离的终端: 使你在应用程序包含从终端输入的代码(比如cin,fgets等)时能够输入.如果你在程序中使用了终端输入就勾上此选项.</LI></UL></P><H2><A NAME="ss12.2">12.2</A> <A HREF="kdevelop-manual.html#toc12.2">使用内置调试器</A></H2><H3>树视图和输出视图窗口中的变化</H3><P>如果你选择内置的调试器,树视图和输出视图中会增加四个标签.</P><H3>树状视图窗口中</H3><P><UL><LI>VAR标签: 暂停程序在当前位置的局部变量的树状视图.同时,你可以看见在调用该函数的函数中的变量.VAR标签还包含了观察窗口.你可以查看全局变量或某一个局部变量而不是一大串局部变量的值.</LI></UL></P><H3>输出视图窗口中</H3><P><UL><LI>断点 : 断点的列表及其状态.</LI><LI>帧栈 : 调用栈.</LI><LI>反汇编 : 当前被执行的机器代码.</LI></UL></P><H3>在面板中和调试按钮的变化</H3><H3>面板中</H3><P>在你启动调试器后会有两个普通和可按下的按钮来控制调试功能.</P><H3>调试菜单中</H3><P>党开始调试时,10条控制调试的菜单变为可用.</P><P>已实现的功能: <A NAME="Available functions"></A> <UL><LI>运行: 从当前位置继续程序执行.</LI><LI>运行到光标处: 执行程序直到光标的当前位置</LI><LI>单步跳过: 执行一行代码并停在同一源文件的下一行.这会运行任何遇到的函数直至其符合上述条件.</LI><LI>单步跳过指令: 象上面一样,执行一条机器指令.</LI><LI>单步进入: 刚好执行一行代码.即如果存在,你将"单步进入"函数.</LI><LI>单步进入指令: 象上面一样执行一条机器指令.</LI><LI>单步跳出: 运行到当前栈帧(函数)结束.</LI><LI>浏览器: 允许对数据进行各种查看.当前实现的查看有:<OL><LI> 内存地址</LI><LI> 反汇编代码</LI><LI> 当前寄存器</LI><LI> 当前库</LI></OL></LI><LI>暂停: 暂停程序执行.</LI><LI>停止Stop: 停止程序执行并退出调试器.</LI></UL></P><H3>细节</H3><H3>断点</H3><P>在源文件中可以设置断点或观察点.两种类型的断点都可以在任何时间设置,而观察点只在变量的局部域中有意义.当你处理全局变量的时候,观察点更为有用.</P><H3>设置/取消断点</H3><P>只需要点击一下就可以设置/取消断点.在编辑器中你需要设置断点行左边的"图标"边界上点击.再次点击就取消了该断点.</P><H3>通过菜单控制断点</H3><P>在断点列表或编辑器的图表边界中的断点上点右键,会出现一个关于断点的菜单.你可以通过它来删除断点,清除所有的断点或者编辑断点.</P><H3>编辑断点</H3><P>使用上面的菜单现实断点编辑对话框.包括以下一些域:<OL><LI>条件: 输入gdb中断程序执行的条件.</LI><LI>忽略次数: 你希望gdb在停止程序执行前忽略该断点多少次.</LI><LI>激活Enable: 激活以后,gdb将停于此处.如果禁止gdb则忽略.</LI></OL></P><H3>清除所有断点</H3><P>删除为该程序设置的所有断点</P><H3>设置/取消观察点</H3><P>在变量视图中的某个变量上点击鼠标右键.你可以通过现实的弹出式菜单在局部变量上设置观察点.该功能局限于局部变量所在的域.党变量超过了其有效域,观察点被删除.</P><P>警告:这可能会带来问题,所以在为局部变量设置观察点时要小心.</P><P>观察点也可以通过右击前一个遇到的观察变量并选择"设为观察点".</P><H3>设置/取消观察变量</H3><P>在变量视图的底部有一个"观察"域,你可以在这里输入希望显示在列表中的变量名字.输入变量名并按回车或点击旁边的"添加"按钮.鼠标右击树状试图中的观察变量会出现弹出式菜单,你可以通过它将观察变量删去.</P><P>你也可以在编辑窗口中的某个变量上点击鼠标右键,通过显示的菜单选择"查看:变量名"来添加观察变量.</P><H3>改变变量的值</H3><P>通过观察变量实现.如果你有个变量叫"test",在观察域中输入"test=5"并将其添加到列表中.注意,"test"在程序每次被断点中断时都会被设为5,所以你一旦设置了该变量,往往需要从视图中删除掉.</P><H2><A NAME="The floating toolbar"></A> <A NAME="ss12.3">12.3</A> <A HREF="kdevelop-manual.html#toc12.3">浮动工具条</A></H2><P>浮动工具条是内置调试器的一个特征,它使你调试GUI应用程序变得舒适.该工具条要么在所有窗口的上面,要么在面板中.在面板中的时候,你可以点击按钮来执行程序.其执行的功能是"单步调过".</P><P>除开<A HREF="#Available functions">已实现的功能</A>, 浮动工具条提供两个附加的功能:<UL><LI>设置焦点于kdevelop : 将焦点设置在KDevelop上</LI><LI>设置焦点于应用程序 : 把焦点设置在当你按下"将焦点设置在KDevelop上"时拥有焦点的窗口上.这是一种折衷,应该把焦点设置在被调试的应用程序上,但这很难做到.如果任何人有更好的方法实现这个功能,请告诉我们.</LI></UL></P><P>当gdb中断程序时,可能是碰到了断点,我们高亮显示"设置焦点于KDevlop".我们并不将焦点自动的切换到KDevelop,这样你可以在该处看一下应用程序窗口.点击"设置焦点"按钮切换到Kdevelop或者按工具条上的按钮执行你选择的功能.</P><H2><A NAME="Shared libraries and breakpoints"></A> <A NAME="ss12.4">12.4</A> <A HREF="kdevelop-manual.html#toc12.4">共享库和断点</A></H2><P>共享库和断点有一个可以得到合理解决的问题.这个问题是:gdb不会接受一个没有打开的共享库中的断点,虽然该共享库即将会用dlopen打开.</P><P>解决办法是让gdb告诉我们一个共享库什么时候被打开的.我们通过设置"stop-on 1"来实现.这意味着,当用户设置一个断点的时候,我们把该断点标记为挂起,如果gdb告知中断成功则标记为活跃,否则保持其挂起状态.下一行代码将被"继续".</P><P>这就是"懒断点"</P><P>然而,当你使用"单步跳过"命令并且单步跳过的那行会载入库时可能会导致问题发生.这会在载入库时引发中断.并且,一般调试器会"继续"(即运行到下一个断点或代码结束).可以用户希望程序停在下一行,所以在这个位置上,我们并不继续,而是让它留在那里(其中的某处会有一个dlopen命令).这不太和谐,但是没有更好的办法了.</P><HR><A HREF="kdevelop-manual-13.html">Next</A><A HREF="kdevelop-manual-11.html">Previous</A><A HREF="kdevelop-manual.html#toc12">Contents</A></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -