问题描述
我知道两个函数func_1和func_5,但是在func_1和func_5之间确实有一些函数,我不知道这些函数是什么,现在我的问题是我的程序正在击中func_1,但没有到达我之间的某个位置的funct_5运行gdb时程序崩溃,但是由于程序停止,我没有任何回溯细节。
现在我怎么知道它在哪里崩溃以及在哪个函数中崩溃,我怀疑在func_1和func_5这两个函数之间,某些函数正在导致崩溃。
[Inferior 1 (process 23939) exited with code 01]
(gdb) bt
No stack.
请问有人可以告诉我该如何处理吗?
解决方法
由于您使用的是gdb,因此backtrace
和/* demo.c */
#include <stdio.h>
void fn1(void) { puts("Hello"); }
void fn2(void) { fn1(); }
void fn3(void) { fn2(); }
int main(void)
{
fn3();
return 0;
}
会有所帮助。
一个例子:
-g
使用 gcc -std=c11 -Wall -pedantic -g -o demo demo.c
标志进行编译:
trace.gdb
创建一个脚本来自动执行任务,将其命名为set pagination off
rbreak demo.c:.
command
silent
backtrace 1
continue
end
run
(名称不重要),其内容如下:
gdb -quiet -command=trace.gdb ./demo
现在运行命令:
Reading symbols from ./demo...done.
Breakpoint 1 at 0x40053a: file demo.c,line 3.
void fn1(void);
Breakpoint 2 at 0x40054b: file demo.c,line 4.
void fn2(void);
Breakpoint 3 at 0x400556: file demo.c,line 5.
void fn3(void);
Breakpoint 4 at 0x400561: file demo.c,line 9.
int main(void);
#0 main () at demo.c:9
#0 fn3 () at demo.c:5
#0 fn2 () at demo.c:4
#0 fn1 () at demo.c:3
Hello
输出为:
public static bool IsLocal(string host)
{
try
{
var hostIPs = Dns.GetHostAddresses(host);
var localIPs = Dns.GetHostAddresses(Dns.GetHostName());
foreach (var hostIP in hostIPs)
{
if (IPAddress.IsLoopback(hostIP)) return true;
foreach (var localIP in localIPs)
{
if (hostIP.Equals(localIP)) return true;
}
}
}
catch { }
return false;
}