【问题标题】:gdb run program questionsgdb 运行程序问题
【发布时间】:2019-12-05 01:01:13
【问题描述】:

程序需要调试: ~/bin/tryIt(生成:gcc -g -Wall -o try try.c) gdb 版本: GNU gdb (GDB) 8.3

在为所有试验设置相同的断点后运行程序 tryIt 的问题: 1.运行tryIT有不同的bash,有时是OS(MAC OS最新版本)bash:~/bin/tryIt

有时它是 GDB bash:~/Library/Caches/gdb/bin/bash。

问:为什么 GDB 使用不同的 bash 来处理程序?如何控制/选择运行的那个?

  1. 有时正在运行的程序确实会在断点处停止并显示 gdb 提示符。似乎它仍在运行,但有时它会在断点处停止。
    这似乎是随机发生的(仅 10% 停止)并且与运行程序的 bash 不匹配。

问:断点不能停是什么原因

  1. 当程序不能在断点处停止时(显示行如:[New Thread 0x1703 of process 14771]),Ctrl+C不能停止程序,kill -9也不能杀死正在运行的程序(无论是哪个 bash 调用它)都必须终止 gdb 并再次执行所有操作。

在网上搜索了所有解决方案(包括 stackoverflow.com),但没有一个有效。虽然不尝试更改 gdb 源代码的解决方案。

tryIt.c源代码


#include <stdio.h>
#include <stdlib.h>
typedef struct node NODE;

struct node
{
  int x;
  char *name;
  NODE *next; 
};
NODE *getNext(NODE *stNode)
{
  return stNode->next;
}
int main()
{
  NODE n1, n2, n3;
  n1.x = 5;
  n1.name = "n1";
  n1.next = &n2;

  n2.x = 10;
  n2.name = "n2";
  n2.next = &n3;

  n3.x = 20;
  n3.name = "n3";
  n3.next = NULL; 

  struct node *nx = getNext(&n1);
  printf("Current Node:%s, its value:%d\n", nx->name, nx->x);

  NODE *ptr = &n1;
  while (ptr != NULL)
  {
    printf("Current Node:%s, its value:%d\n", ptr->name, ptr->x);
    ptr = ptr->next;
  }

  return 0;
}


【问题讨论】:

    标签: c debugging gdb gnu


    【解决方案1】:

    我自己知道如何回答 Q1。

    编辑 ~/.gdbinit 文件。如果它不存在,请创建它。 添加一行: 设置启动与外壳禁用

    然后重新运行gdb,它会一直显示进程~/bin/tryIt

    【讨论】:

      猜你喜欢
      • 2011-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多