pgbouncer中增加消息格式解析和调试信息后,导致链接失败的问题

由于之前增加了解析postgresQL消息的功能,为打印每个消息的内容,在另外一个protooutput.h的文件中增加了每种消息格式的inline打印函数。为了知道代码中每次采用log_debug宏打印出来的信息的location。于是修改了log_debug宏,增加打印__FILE__,__LINE__,__func__的功能。增加完成后代码的大致情况如下:

打印消息内容的protooutput.h文件中有下面的函数:

log_debug修改后的代码如下:

其中LOG_TRACE_RUN宏就是新增加的打印location的宏。定义如下:

结果直接编译,却显示链接时提示没有定义_print_functionCallPK函数,但是把log_debug宏中新增加的LOG_TRACE_RUN宏去掉后,却能够顺利的链接完成。但是从上面的代码看完全没有错误哈,为什么链接不上呢?

后面想了想链接不上_print_functionCallPK函数,肯定是编译protooutput.h文件的时候出现了问题,多半是inline导致的。于是就把print_functionCallPK函数从inline修改成普通函数,再次编译却成功链接了。

这是为啥呢?有没有大神知道原因,请赐教?

时间: 2024-11-06 18:14:17

pgbouncer中增加消息格式解析和调试信息后,导致链接失败的问题的相关文章

IIS7部署项目时提示:"错误消息 401.2。: 未经授权: 服务器配置导致登录失败。"的解决办法

这个错误的定位:你的站点使用了Forms验证,而且在部署在生产环境的时候,设置错误,或者注释了. 解决方法如下: 1.检查Forms配置是否屏蔽. 2.有权限访问的资源是否已经开发. 基本就围绕以上两点即可. 具体的场景描述和解决方案: 详细报错如下: “/”应用程序中的服务器错误. 访问被拒绝. 说明: 访问服务此请求所需的资源时出错.服务器可能未配置为访问所请求的 URL. 错误消息 401.2.: 未经授权: 服务器配置导致登录失败.请验证您是否有权基于您提供的凭据和 Web 服务器上启用

虚拟仿真引擎中的消息机制

 1.虚拟仿真引擎和游戏引擎在消息机制方面的异同 虚拟仿真引擎与游戏引擎极为相似,但又有其不同之处.游戏引擎重在游戏体验,所以60-120HZ的画面刷新率和事件刷新率依然足够.但虚拟仿真引擎不但需要仿真体验,更需要更高速度的消息机制.试想在动作捕捉的应用中,动作捕捉设备的刷新率的典型值是120HZ,或者是需要记录一个设备的运动轨迹,也需要更高的刷新率.但是在中等以上复杂度的渲染中根本无法达到120HZ,同时如果需要进行立体渲染,可以预见渲染速率是不会超过60HZ的,因为超过60HZ的立体渲染

深度解析KGDB调试Linux模块和内核

转载文章请注明作者和二维码及全文信息. 不会编程的程序员,不是好的架构师,编程和内核调试也是出色架构师的必修课.谈起编程人员的数量,基于Linux平台的软件工程师肯定是最多的,没有之一.那今天我们就以Linux为例,深入讲一下内核模块和内核的调试技术和调试工具KGDB. 1 KGDB背景 KGDB是在内核2.6.26版本中正式支持的,对应发行版即SLES11及以上.RHEL6及以上,在此之前的内核版本由Linsyssoft Technologies公司提供补丁以支持KGDB,但并不是所有内核版本

在MFC程序中增加控制台

在MFC程序中增加控制台 MFC程序中,如果想要输出调试信息,我们一般都是TRACE或者使用LOG文件,都不是很方便,第一个需要我们在调试状态下,第二个也要配置麻烦而且不直观.而使用Console来显示调试信息应该是更好的选择.下面介绍几种在MFC程序中,使用控制台来输出调试信息. 1. 我们可以自己创建一个命令行窗口,在主程序的初始化的时候调用AllocConsole()函数.相应的退出的时候调用FreeConsole() 1 BOOL CMFCTestApp::InitInstance()2

[Effective JavaScript 笔记]第47条:绝不要在Object.prototype中增加可枚举的属性

之前的几条都不断地重复着for...in循环,它便利好用,但又容易被原型污染.for...in循环最常见的用法是枚举字典中的元素.这里就是从侧面提出不要在共享的Object.prototype中增加可枚举的属性.这就导致,我们在开发的时候,不能在Object.prototype中添加有用的方法.如,我们想增加一个产生对象属性名数组的allKeys方法将会怎么样? Object.prototype.allKeys=function(){ var res=[]; for(var key in thi

现代IM系统中的消息系统架构

前言IM全称是『Instant Messaging』,中文名是即时通讯.在这个高度信息化的移动互联网时代,生活中IM类产品已经成为必备品,比较有名的如钉钉.微信.QQ等以IM为核心功能的产品.当然目前微信已经成长为一个生态型产品,但其核心功能还是IM.还有一些非以IM系统为核心的应用,最典型的如一些在线游戏.社交应用,IM也是其重要的功能模块.可以说,IM系统已经是任何一个带有社交属性的应用需要具备的基础功能,网络上对于这类系统的设计与实现的讨论也越来越多. IM系统在互联网初期即存在,其基础技

Crash log符号化与调试信息

这篇文章主要整理了crash log的符号化解析和调试信息与配置相关的一些内容. 对于做移动App开发的来说,质量和体验都是很重要的.一个客户端应用如果经常“闪退”,是产品质量很差的一个体现,用户体验就更不用提了.所以开发一个优秀的App,首先是保证自身的技术质量,尽量杜绝“闪退”,也就是“Crash”.但客户端上线后,偶尔出现一个隐藏很深的bug也在所难免.我们所能做的就是尽可能的收集问题相关的信息,争取在将来的新版本中解决和改进. 0. Crash 一个App启动之后,用着用着就突然被iOS

Windows程序调试系列: 使用VC++生成调试信息 转

Windows程序调试系列: 使用VC++生成调试信息 ZhangTao,[email protected], 译自 “Generating debug information with Visual C++”,Oleg Starodumov 出处: http://www.cnblogs.com/itrust/archive/2006/08/17/479603.aspx 引子 当我们使用调试器来调试程序时,我们希望能够单步调试到源代码中,在代码中设置断点,观察变量的值(包括用户自定义的复杂类型的

C# trace debug TraceListener调试信息详解

在C#编程中,可能要碰到把调试信息输出的问题,我们可以自己把信息显示在某个控件上,但是MS自己提供了一套机制帮助我们输出一些调试信息,这些信息有助于我们判断程序的走向,不用自己再去额外写调试代码了. 一般调试的时候有两个很重要的类Trace, Debug, Trace帮助我们跟踪代码用,Debug帮助我们调试代码用.是否启用,取决于我们的设置: 比如这个只定义了Trace常量,表示只启用了Trace类. 先说说Trace类的结构(Debug类一样): Trace: Listeners:这是个Tr