【发布时间】: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 来处理程序?如何控制/选择运行的那个?
- 有时正在运行的程序确实会在断点处停止并显示 gdb 提示符。似乎它仍在运行,但有时它会在断点处停止。
这似乎是随机发生的(仅 10% 停止)并且与运行程序的 bash 不匹配。
问:断点不能停是什么原因
- 当程序不能在断点处停止时(显示行如:[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;
}
【问题讨论】: