编码显示c函数被调用时在源文件中的位置

问题描述

编码显示c函数被调用时在源文件中的位置

编码显示c函数被调用时在源文件中的位置.
例如
void test{
//在这里弹出对话框,显示被调用时的位置.
}
在函数 void testCall(){
test(); //在这里弹出对话框,显示testCall 在源文件中的行号(+1)
}
当执行到 testCall()时显示行test()所在行号---不是void test{}的行号,而是 void testCall(){}的行号(+1)

解决方案

这个像是编译器做的事情。分析源码吧

解决方案二:

你应贴出可供测试的代码
实在无法理解你的问题是什么!

解决方案三:

使用一些宏跟踪调试
ANSI标准说明了五个预定义的宏名。它们是:
LINE
FILE
DATE
TIME
STDC

如果编译器不支持这些宏,就只能自己分析源代码所在的 C 文件了。

解决方案四:

能否输出行号取决于编译器产生的调试符号信息是否包含了行号,这和不同编译器,以及你的编译选项有关。

比如gcc
http://linux.chinaunix.net/techdoc/develop/2009/02/11/1061408.shtml
VC
http://www.cnblogs.com/xuanhun/archive/2011/10/11/2207398.html

解决方案五:

我在百度知道提出了同样问题, 得到了一个回答,但并不完全满意,大家可以参考一下:

用参数把test被调用时的行号传进去 然后显示就可以了

比如
void test(int line) {

printf("test is called at line %dn", line);

}

void testCall()
{

test(__LINE__);

}

追问

2014-12-31 17:42 很好的想法! 确定采纳你的方案!希望有更好的方案: 不更改原来函数的声明类型,仅仅插入代码实现调试目的.这样会很难吗?希望继续提供帮助!

时间: 2024-09-27 17:53:23

编码显示c函数被调用时在源文件中的位置的相关文章

JavaScript函数的调用以及参数传递_基础知识

JavaScript 函数调用 JavaScript 函数有 4 种调用方式. 每种方式的不同方式在于 this 的初始化.this 关键字 一般而言,在Javascript中,this指向函数执行时的当前对象. Note 注意 this 是保留关键字,你不能修改 this 的值.调用 JavaScript 函数 函数中的代码在函数被调用后执行.作为一个函数调用实例 function myFunction(a, b) { return a * b; } myFunction(10, 2); //

cvs-QFile 调用copy函数,csv文件,源文件与目标文件都无法正常显示?

问题描述 QFile 调用copy函数,csv文件,源文件与目标文件都无法正常显示? Ubuntu系统下: QFile file("/tmp/1.csv"); file.open( QIODevice::WriteOnly); file.copy("/tmp/2.csv"); file.close(); 执行之前,1.csv可以正常显示. 内容如下: 119 2014050701 2014050702 是我izhognguoren 你是什么人呢速度发送对方 2014

在调用memcpy函数时出现 异常: 0xC0000005: 读取位置 0x006bd000 时发生访问冲突

问题描述 在调用memcpy函数时出现 异常: 0xC0000005: 读取位置 0x006bd000 时发生访问冲突 BOOL Kirsch(BYTE *pData,int Width,int Height) {//定义实现Kirsch算法的8个模板: int i,j,s,t,k,max,sum[8]; static int a[3][3]={{+5,+5,+5},{-3,0,-3},{-3,-3,-3}}; static int a1[3][3]={{-3,+5,+5},{-3,0,+5},

getJSON调用后台json数据时函数被调用两次的原因猜想_jquery

近期在做前端开发时候使用到getJSON调用后台去json数据,发现后台的函数被调用两次,函数名称为getMessages, 多方调查结合网上兄弟经验发现,只要函数名不以get开头就没这个问题了, 本人大胆猜测,应该是请求返回的时候构造json数据时,调用所有get开头的函数,然后取得返回值然后构造响应. 所以,以get开头的函数做action的函数时,首先响应请求调用了一次,然后构造响应又调用了一次.

c语言中函数形参为空指针,调用时可以不用带实参吗?

问题描述 c语言中函数形参为空指针,调用时可以不用带实参吗? 最近在看代码,有地方不太懂 void map_hash_init(void) { map_hash_head = hash_create ((uint32_t (*)(void ))(con_key), (int ()(void *, void *))(Con_comp)); } 这是一个hash表的初始化 hash_creat的原型: hash_create (uint32_t (*hash_key) (), int32_t (*h

C#写的重载函数,封装为COM后,供VB6调用时发现函数名称会自动加_2/_3等下标,但是却不能调用。

问题描述 如题,截图如下C#函数定义VB6引用出的函数VB6调用报错高手们帮解决下啊,别告诉我改C#接口的函数名称,就是因为不能改所以才...... 解决方案 解决方案二:我觉得应该是那个out参数vb6不支持吧解决方案三:其他函数也有out类型的,vb6就按ref处理的,应该不在这儿,就觉得是那个重载的函数名称被vb别名命名的问题解决方案四:VB6.0是面向过程的语言,不支持重载吧.解决方案五:object[]与string[]的重载,第二个参数别用variant试试解决方案六:用了objec

拓展实践:系统函数的调用

这部分内容可以放在考试后再安排,但上机报告一定要看到. 除了基本的数据类型,C++还定义了一个内容丰富的抽象数据类型标准库.通过使用标准库中的组件,通常可以避免从头到尾来设计自己的IO流,string,容器,国际化,数值数据结构以及诊断等机制.程序员可以方便地调用标准库,以便有更多的时间和精力去关注软件开发中真正重要的部分--实现软件的其他功能.这也是提高软件质量的的一个有利条件. C++标准库非常大,在C++标准中,关于标准库的规格说明占了密密麻麻300多页.标准库中的功能越多,开发自己的应用

eb ervice-C# WebService在接收到带参数的接口调用时自动将加密的参数解密

问题描述 C# WebService在接收到带参数的接口调用时自动将加密的参数解密 我的WebService的所有接口调用的参数都是加密过的,而且有接口函数.我在想有没有什么办法,在WebService接收到接口调用请求时,自动将参数解密,而不需要我每个函数内写解密?????? 我暂时没有C币了,有一定奉上 解决方案 我在Spring里面是使用filter过滤器机制来做的!所有的请求都先通过filter,在filter里面做统一的处理,然后再分发到各个具体的controller去.我觉得这种思路

C语言函数的调用与参数

如果一个函数要使用参数,它就必须定义接受参数值的变量.4.3.1 形式参数与实际参数函数定义时填入的参数我们称之为形式参数,简称形参,它们同函数内部的局部变量作用相同.形参的定义是在函数名之后和函数开始的花括号之前.调用时填入的参数,我们称之为实际参数,简称实参.必须确认所定义的形参与调用函数的实际参数类型一致,同时还要保证在调用时形参与实参的个数出现的次序也要一一对应.如果不一致,将产生意料不到的结果.与许多其它高级语言不同,(是健壮的,它总要做一些甚至你不希望的事情,几乎没有运行时错误检查,