ubuntu12.04下Qt调试器的使用

摘要:
事实证明,在Ubuntu 11.04之后的版本中,引入了名为ptracescope的安全机制。该机制防止用户访问当前运行进程的内存和状态,这会导致QtCreator的调试器无法正常工作。这个错误尤其发生在11.04之后的Ubuntu版本中。为了解决这个问题,有两种方法,这两种方法都需要root权限。

  最近,我一直在用Qt编写C++程序,但在编写过程中遇到了问题,想用Qt Creator中的调试器调试一下,但调试时(在Qt Creator中已配置好相应的调试器)出现“ ptrace:Operation not permitted ”的错误,如下图所示:

ubuntu12.04下Qt调试器的使用第1张

经百度搜索,找到了问题的原因及其解决方案。

  原来,在Ubuntu 11.04("Natty Narwhal")之后的版本中,一种叫做 ptrace scope 的安全机制被引入。这种机制防止用户访问当前正在运行的进程的内存和状态,这就造成Qt Creator的调试器不能正常工作。这种安全机制可以防止恶意软件附加到其他进程中(如SSH或者GPG),读取程序内存,产生安全问题。

  这个错误特别出现在Ubuntu 11.04之后的版本中,为了解决这个问题,有两种方法,这两种方法都需要root权限。

  第一种解决方法可以临时解决这个问题,但在下次重启系统后会失效。方法是将/proc/sys/kernel/yama/ptrace_scope虚拟文件的内容设为0,使用命令:

sudo echo 0 > /proc/sys/kernel/yama/ptrace_scope

  第二种解决方法可以永久解决这个问题,方法是编辑/etc/sysctl.d/10-ptrace.conf这个文件,设置:

kernel.yama.ptrace_scope = 0(默认是1)

  重启系统即生效。

  以上问题解决后,又出现了另一个问题:设置了断点停不下来

  原因:一直没有编译debug版本,一直使用的是release版来调试。

  解决方法:配置为debug版本,重新编译一下即可。

  如果调试时只出现下图所示的错误,则是权限不足的问题。

ubuntu12.04下Qt调试器的使用第2张

  解决方法:改用 sudo ./qtcreator 的方式启动,为了方便,可以在home下创建一个qtcreator的快捷方式,这样就不用每次都cd到程序所在目录了。

免责声明:文章转载自《ubuntu12.04下Qt调试器的使用》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇pip安装离线包TS Eslint规则说明下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Ubantu 16.04升级内核版本和还原到升级之前的内核版本的方法

一、查看系统信息 1、查看发布版本: 命令: lsb_release -a 运行结果: / 2、查看内核版本: 命令: uname -sr 运行结果: 二、升级内核的方法 1、内核下载地址:http://kernel.ubuntu.com/~kernel-ppa/mainline/ 。打开地址后,拖动鼠标到网页最底端,找到最新版本的内核v4.15...

Keil MDK使用J-LINK分别在Sram,Nor Flash以及Sdram中调试代码的原理和方法

一、概述 MDK开发ARM裸机程序时,在调试阶段通常是先让程序在SDRAM中执行,以加快调试速度,也避免频繁烧写Nor Flash,因此需要知道如何指定程序在哪个位置执行。本文以realarm 2410开发板为例,进行描述。该开发板使用S3C2410A做为CPU,有2MB的 Nor Flash,以及64MB的SDRAM,4KB的SRAM。程序可直接在Nor...

Windbg学习18(sx和ld)

1.sx sx*命令用来控制被调试的程序发生某个异常或特定事件时,调试器要采取的动作 sx 命令显示当前进程的异常列表和所有非异常的事件列表,并且显示调试器遇到每个异常和事件时的行为。 sxr 命令将所有异常和事件过滤器的状态重设为默认值。命令被清除、中断和继续选项被重设为默认值,等等。 sx这个命令的输出信息可以分为三个部分: 第一部分是事件处理与相应处...

android 调试 native 程序的方法

一、背景 首先说需求,这个需求非常常见,就是android上需要的一个功能,linux已经有开源代码而且非常稳定,希望能直接porting过去使用,这个程序是pure c 的代码,也就是说,跟android framework, java 没关系,也跟jni没有关系,我们希望的就是能编译成一个可执行工具,push到android后能直接跑起来使用。 既然是...

GDB调试教程

简介   GDB(GNU debugger)是GNU开源组织发布的一个强大的UNIX下的程序调试工具。可以使用它通过命令行的方式调试程序。它使你能在程序运行时观察程序的内部结构和内存的使用情况。你也可以使用它分析程序崩溃前的发生了什么,从而找出程序崩溃的原因。相对于windows下的图形界面的VC等调试工具,它提供了更强大的功能。如果想在Windows下使...

gdb调试

前期准备 一般来说GDB主要调试的是C/C++的程序。在gdb调试之前,必须要把调试信息加到可执行文件中。使用编译 器(cc/gcc/g++)的 -g 参数可以做到这一点。如: gcc -g hello.c -o hello g++ -g hello.cpp -o hello 如果没有-g,将看不见程序的函数名、变量名,所代替的全是运行时的内存地址。...