2 ad hoc nw ad_hoc_NW 于 2016.03.14 14:58 提问

emacs进行gdb调试的相关问题

为什么打开gdb后无法调试?这是因为我的程序哪里有问题嘛?图片说明
以下是我的程序:
#include
#include
#include
#include
using namespace std;

struct BinaryTreeNode{
int m_nValue;
BinaryTreeNode* m_pLeft;
BinaryTreeNode* m_pRight;
};

BinaryTreeNode* CreateBinaryTreeNode(int value)
{
BinaryTreeNode* pNode = new BinaryTreeNode();
pNode->m_nValue = value;
pNode->m_pLeft = NULL;
pNode->m_pRight = NULL;

return pNode;

}

void ConnectTreeNodes(BinaryTreeNode* pParent, BinaryTreeNode* pLeft, BinaryTreeNode* pRight)
{
if(pParent != NULL)
{
pParent->m_pLeft = pLeft;
pParent->m_pRight = pRight;
}
}

void PrintTreeNode(BinaryTreeNode* pNode)
{
if(pNode != NULL)
{
printf("value of this node is: %d\n", pNode->m_nValue);

    if(pNode->m_pLeft != NULL)
        printf("value of its left child is: %d.\n", pNode->m_pLeft->m_nValue);
    else
        printf("left child is null.\n");

    if(pNode->m_pRight != NULL)
        printf("value of its right child is: %d.\n", pNode->m_pRight->m_nValue);
    else
        printf("right child is null.\n");
}
else
{
    printf("this node is null.\n");
}

printf("\n");

}

void PrintTree(BinaryTreeNode* pRoot)
{
PrintTreeNode(pRoot);

if(pRoot != NULL)
{
    if(pRoot->m_pLeft != NULL)
        PrintTree(pRoot->m_pLeft);

    if(pRoot->m_pRight != NULL)
        PrintTree(pRoot->m_pRight);
}

}

void DestroyTree(BinaryTreeNode* pRoot)
{
if(pRoot != NULL)
{
BinaryTreeNode* pLeft = pRoot->m_pLeft;
BinaryTreeNode* pRight = pRoot->m_pRight;

    delete pRoot;
    pRoot = NULL;

    DestroyTree(pLeft);
    DestroyTree(pRight);
}

}
void FindPathToLeaf(BinaryTreeNode* pNode,int expectedSum,
vector& ivec, int& currentSum);

void FindPath(BinaryTreeNode* pRoot, int expectedSum)
{
cout<<"Begin in here:";
if(pRoot==NULL)
return;
vector ivec;
int currentSum=0;
FindPathToLeaf(pRoot,expectedSum,ivec,currentSum);
}
void FindPathToLeaf(BinaryTreeNode* pNode,int expectedSum,
vector& ivec, int& currentSum)
{
currentSum+=pNode->m_nValue;
ivec.push_back(pNode->m_nValue);

bool isLeaf=pNode->m_pLeft==NULL&&pNode->m_pRight==NULL;
if(isLeaf&&expectedSum==currentSum)
    {
        cout<<"A path is:";
        for(vector<int>::iterator i=ivec.begin();i<ivec.end();i++)
            {
                cout<<(*i)<<" ";
            }
    }

if(pNode->m_pLeft!=NULL)
    FindPathToLeaf(pNode->m_pLeft, expectedSum, ivec, currentSum);
if(pNode->m_pRight!=NULL)
    FindPathToLeaf(pNode->m_pRight, expectedSum, ivec, currentSum);

currentSum-=pNode->m_nValue;
ivec.pop_back();

}

void Test(char* testName, BinaryTreeNode* pRoot, int expectedSum)
{
if(testName != NULL)
printf("%s begins:\n", testName);

FindPath(pRoot, expectedSum);

printf("\n");

}
// 10
// / \
// 5 12
// /\

// 4 7

// 有两条路径上的结点和为22
void Test1()
{
BinaryTreeNode* pNode10 = CreateBinaryTreeNode(10);
BinaryTreeNode* pNode5 = CreateBinaryTreeNode(5);
BinaryTreeNode* pNode12 = CreateBinaryTreeNode(12);
BinaryTreeNode* pNode4 = CreateBinaryTreeNode(4);
BinaryTreeNode* pNode7 = CreateBinaryTreeNode(7);

ConnectTreeNodes(pNode10, pNode5, pNode12);
ConnectTreeNodes(pNode5, pNode4, pNode7);

printf("Two paths should be found in Test1.\n");

char str[]="Test1";
Test(str, pNode10, 22);

DestroyTree(pNode10);

}

int main(int argc,char* argv[])
{
Test1();
return 0;
}

1个回答

y1046086879
y1046086879   2016.03.20 17:59

在main里设个断点

b main
r
试试

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
【那些年遇到过的面试题】gdb调试多线程
 http://blog.csdn.net/kernel_learner/article/details/7335516 这篇也很不错 http://blog.chinaunix.net/uid-25909722-id-3013120.html 也安利这篇 GDB多线程调试的基本命令 info threads 显示当前可调试的所有线程,每个线程会有一个GDB为其分
介绍下emacs+gdb调试环境,可以实时跟踪代码执行位置,提高工作效率
准备工作: 1.      安装 emacs  解压后configure --prefix=xxx; make; make install就行了   gdb调试: 1.      写一个gdbfile,就是把hcc xxx.c –v中包含cc1的那一行拷出来,放到文件里,形成一个gdb的脚本,如 file cc1 b reload r test.c -quiet -dump
改造Emacs GDB调试的多窗口布局
转自:http://ppgunjack.iteye.com/blog/1179657 Emacs支持多窗口的GDB调试,要打开GDB的多窗口模式只需要设置Emacs全局变量gdb-many-windows 为true。 但默认的多窗口感觉并不够用,没有汇编窗口,在学习一些语言底层实现的时候有时还需要看看汇编和寄存器内容。   研究Emacs的GBD ui脚本发现Emacs的GD
emacs自由切换窗口(不用鼠标)
快捷键:1.C-x C-b:查看已打开的黄采取
makefile文件和gcc g++ gdb编译
makefile文件:规则文件,可以可以make简化编译过程,可以主动发现哪个与源文件相关的目标文件的变动并更新,           当没变化的时候不更新,简化编译过程。不过,注意 .h文件改变后makefile检查不出来.删除后重新make all. .h编译后.h.gch 格式: 名:目标文件1 目标文件2 命令  例如 install :a.
emacs gdb调试
1 引言2 准备工作:将调试信息编译在程序中3 开始:开启Emacs的调试模式GUD 3.1 运行gdb3.2 gdb界面3.3 小结 4 调试:设置断点,控制程序流程 4.1 设置、删除断点4.2 运行程序4.3 单步执行、运行到光标处4.4 继续运行程序4.5 小结 5 察看变量的值 5.1 本地变量buffer5.2 察看变量值5.3 用工具提示显示变量值5.4 小结
【面试】GDB调试
用GDB调试多进程程序  如果一个进程通过fork系统调用创建了子进程,gdb会继续调试原来的进程,子进程则正常运行。那么该如何调试子进程呢?单独调试子进程  子进程从本质上说也是一个进程,因此我们可以用通用的gdb调试方法来调试他。   举例来说如果要调试一个服务器中的某一个子进程,我们可以先运行服务器,然后找到目标子进程的PID,再将其附加(attach)到gdb调试器上,具体操作为:
使用emacs的org-mode进行时间管理(一)——简介
转载至http://www.laihj.net/2009/12/emacs%E7%9A%84org-mode%EF%BC%BB%E5%88%9D%E6%8E%A2%EF%BC%BD/     我觉得在linux下,有了emacs和org-mode,基本不用费力去寻找GTD软件或者日程管理软件了,你所需的就只是配置好二者,然后慢慢习惯它们的操作。 每天打开ubuntu的时候,在一个工作区上把
mac下emacs配置python的相关东东
为了笔试,顺便把emacs环境配置一下。 ls -a 显示所有的文件夹,包括隐藏文件。 1、先把显示行号配置了一下,用的是下面链接的方法,的确配置成功了,借鉴网上的例子,还是很管用的。 http://blog.chinaunix.net/uid-29124653-id-4473775.html 2、ido配置 之前在mint下,稀里糊涂的配置过一次,后来重装系统后,emac
emacs相关配置文件
emacs相关配置文件,.emacs,较好的配置方法。