微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在C编程的两个函数之间找到执行函数

如何解决如何在C编程的两个函数之间找到执行函数

我知道两个函数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;
        }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。