调试 – 如何获取Postgres中某些信号(例如SIGINT)的处理程序名称
发布时间:2020-12-13 16:03:45 所属栏目:百科 来源:网络整理
导读:如何在Postgres中获取处理程序的某些信号(例如SIGINT)的名称/地址?我们可以使用signal(SIGINT,my_handler)来设置信号处理程序,但是有一个函数可以告诉我们哪个函数(在这种情况下,my_handler)处理某些信号(在本例中为SIGINT)?或者我们可以找到使用GDB吗?
如何在Postgres中获取处理程序的某些信号(例如SIGINT)的名称/地址?我们可以使用signal(SIGINT,my_handler)来设置信号处理程序,但是有一个函数可以告诉我们哪个函数(在这种情况下,my_handler)处理某些信号(在本例中为SIGINT)?或者我们可以找到使用GDB吗?
解决方法
你正在寻找的函数是
sigaction.它需要三个参数,第一个是信号,第二个是指向新sigaction结构的指针,第三个是指向旧sigaction结构的指针(由函数填充) .要获取当前信号处理程序,请使用第二个参数设置为NULL来调用sigaction.例如,
struct sigaction oldact; sigaction(SIGINT,NULL,&oldact); printf("SIGINT handler address: 0x%lxn",oldact.sa_sigaction); 此方法将要求您修改源. 您也可以通过gdb执行此操作,这不需要修改源代码.例如,如果在注册信号处理程序后附加到进程,则此方法将起作用. (gdb) call malloc(sizeof(struct sigaction)) (gdb) sigaction(SIGINT,$1) (gdb) print ((struct sigaction *)$1)->sa_sigaction (gdb) info sym <address from previous step> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- xml解析技术比较
- 【React Native开发】React Native控件之ListView组件讲解以
- Ajax、Comet、HTML 5 Web Sockets技术比较分析
- PostgreSQL:将非常大数字的十六进制字符串转换为NUMERIC
- c# – 传递父对象作为父对象交互的参考的做法是什么?
- Oracle 12.2新特性掌上手册 - 第三卷 Sharding 的增强
- c# – 禁用警告导致另一个警告的Pragma(CS1692)
- 九爷带你了解 带你了解 Nosql Redis ttserver Flare memcac
- ios – Xcode 7 UI测试,录制按钮是灰色的
- cocos2d 帮助