在gdb中使用print命令是否安全?
收藏

我知道gdb允许通过print <exp>命令打印表达式。据我所知,这种表达式的结果被保存到gdb变量(可以用$N - N - number of variable访问)。打印函数执行的结果是否安全?假设我有函数:

const char* foo(){ return "foo";}

char* foo2(){static char b[10]; /*change b*/; return b}

char* foo3(){char* b; /*Create string on heap*/ return b;}

gdb如何处理print foo(), print foo2(), print foo3()的结果?它会释放变量的内存吗?它会导致错误吗?


最佳答案:

gdb无法知道函数中的内容,因此无法决定返回指针。如果返回的是文本或free变量,则不需要释放内存,因为不执行分配(释放内存将是一个错误)。
另一方面,第三个例子分配了一些内存,所以这是一种内存泄漏,是的,除非您能够从gdb变量上的static调用类似于gdb的另一个函数。

公众号