标签: printf-debugging

如何将对象的字段转储到控制台?

当我运行一个简单的Ruby脚本时,将对象的字段转储到控制台的最简单方法是什么?

我正在寻找类似于PHP的东西print_r(),它也适用于数组.

ruby printf-debugging

250
推荐指数
8
解决办法
17万
查看次数

如何用printfs"调试"Haskell?

来自Ocaml社区,我正在尝试学习一些Haskell.过渡进展顺利,但我对调试有点困惑.我曾经在我的ocaml代码中放置(很多)"printf",检查一些中间值,或者作为标志来查看计算完全失败的位置.

由于printf是一个IO动作,我是否必须解除IO monad中的所有haskell代码才能进行这种调试?或者有更好的方法来做到这一点(如果可以避免,我真的不想手工做)

我也找到了跟踪功能:http: //www.haskell.org/haskellwiki/Debugging#Printf_and_friends 这看起来正是我想要的,但我不明白它的类型:任何地方都没有IO!有人能解释一下跟踪功能的行为吗?

debugging trace haskell printf-debugging

61
推荐指数
3
解决办法
9749
查看次数

Ruby中的"p"是什么?

对于那些知道的人,我确信这是一个愚蠢的问题,但我无法找到它的作用或内容的解释.

CSV.open('data.csv', 'r') do |row|
  p row
end
Run Code Online (Sandbox Code Playgroud)

" p row"有什么作用?

ruby printf-debugging

44
推荐指数
3
解决办法
2万
查看次数

通过添加'print'语句进行调试的正确名称是什么

有许多方法可以进行调试,使用调试器就是其中之一,但对于谦虚,懒惰的程序员而言,简单的方法就是在代码中添加一堆打印语句.

 def foo(x):
     print 'Hey wow, we got to foo!', x

     ...

     print 'foo is returning:', bar
     return bar
Run Code Online (Sandbox Code Playgroud)

这种调试方式是否有正确的名称?

debugging printf-debugging

33
推荐指数
9
解决办法
1万
查看次数

为msvc或替代解决方法模拟__typeof__的最佳方法是什么?

我有一些代码

#define DEBUG_PRINT(x,...) \
    do \
    {\
        _Pragma("GCC diagnostic push") \
        _Pragma("GCC diagnostic ignored \"-Wunused-value\"") \
        __typeof__((0,x)) _x = x; \
        _Pragma("GCC diagnostic pop") \
        DEBUG_PRINT_PTR((#x), &_x, __VA_ARGS__);\
    } while(0)


//The repetition of debug_print_printf_specifier is to avoid repetition for custom types.
#define DEBUG_PRINT_PTR(xstr, xp,...) \
_Generic((*xp), \
const char *: debug_print_printf_specifier(xstr, (void *)xp, TYPE_PTR_TO_PRINTF_SPECIFIER(xp), __FILE__, __LINE__, _my_func__, debug_print_options_apply_group_options(&((debug_print_options){__VA_ARGS__}))),\
char *: debug_print_printf_specifier(xstr, (void *)xp, TYPE_PTR_TO_PRINTF_SPECIFIER(xp), __FILE__, __LINE__, _my_func__, debug_print_options_apply_group_options(&((debug_print_options){__VA_ARGS__}))),\
int: debug_print_printf_specifier(xstr, (void *)xp, TYPE_PTR_TO_PRINTF_SPECIFIER(xp), __FILE__, __LINE__, _my_func__, debug_print_options_apply_group_options(&((debug_print_options){__VA_ARGS__}))),\
float: debug_print_printf_specifier(xstr, …
Run Code Online (Sandbox Code Playgroud)

c overloading typeof printf-debugging visual-studio-2012

24
推荐指数
1
解决办法
3272
查看次数

显示有时printf作为调试可能隐藏错误的教育示例

我记得当我在某个C编程课程中时,老师曾经建议我用它printf来观察我试图调试的程序的执行情况.这个程序有一个分段错误,目前我记不住了.我听从他的建议,分段错误消失了.幸运的是,聪明的TA告诉我调试而不是使用printfs.在这种情况下,这是一件有用的事情.

所以,今天我想向某人展示使用printf可能隐藏错误,但我找不到那个有这个奇怪错误的旧代码(功能?嗯).

问题:你们有没有遇到过这种行为?我怎么能重现这样的东西?

编辑:

我看到我的问题部分将我的观点定位为"使用printf是错误的".我并不是那么说,我不喜欢采取极端的意见,所以我正在编辑一些问题.我同意这printf是一个很好的工具,但我只想重新创建一个案例,其中printfs使分段错误消失,因此,证明必须小心.

c debugging segmentation-fault printf-debugging

7
推荐指数
2
解决办法
2143
查看次数

键入重载宏

我有一堆printf调试助手宏,如果不指定类型那将是非常酷的,你可以做些什么来允许c中的宏重载(如果它在gcc 4.3中可用,则可以是gcc特定的).我想也许是打字,但显然这不起作用.

示例宏(我也有一些ascii终端颜色的东西,我不记得我的头顶)

#ifdef _DEBUG
#define DPRINT_INT(x) printf("int %s is equal to %i at line %i",#x,x,__LINE__);
.
.
.
#else
#define DPRINT_INT(x)
.
.
.
#endif
Run Code Online (Sandbox Code Playgroud)

c macros overloading tostring printf-debugging

7
推荐指数
1
解决办法
1015
查看次数

为pr_debug和printk设置CFLAGS

我想了解一个Linux内核模块,并希望看到的输出pr_debugprintk.我正在使用GNU Make.
我知道要获得pr_debug消息,我们必须使用DDEBUG.

那么,我该如何启用printk语句?

让我们说文件名是kvm.c.这两者有什么区别:

      CFLAGS_kvm.o := -DDEBUG
      CFLAGS_kvm.o += -DDEBUG
Run Code Online (Sandbox Code Playgroud)

这句话的作用是什么:

      CFLAGS_kvm.o := -I.
Run Code Online (Sandbox Code Playgroud)

[编辑]:
看起来我使用方括号引起了一些混乱.实际上通过[filename],我的意思是一些文件,比如kvm.c.

makefile printk printf-debugging

6
推荐指数
1
解决办法
5824
查看次数

C编程:seg fault,printf和相关的怪癖

正如许多年轻程序员所做的那样,我学会了在代码中的不同点插入"here1","here2"等多个打印到控制台语句的有用性,以确定我的程序何时出错.在我的CS研究中,这种强力调试技术为我节省了很多次.但是,当我开始用C编程时,我偶然发现了一个有趣的问题.如果我试着跑

void* test;

printf("hello world");
test[5] = 234;
Run Code Online (Sandbox Code Playgroud)

当然,我为testChar而没有malloc'ing内存的段错误.但是,你会在逻辑上认为的"Hello World"将在赛格故障发生之前打印的,因为这是代码的流程,但以我的经验,它始终是赛格故障首先发生的情况,以及"世界你好"根本没有打印到控制台.(我没能测试这个确切的例子,但我遇到了这种使用在Linux中gcc的情况很多次了.)我猜这有两种编译器重新安排一些事情和/或printf的做使用某种异步刷新的缓冲区,因此不是立即的.这完全是我的猜测,因为我老实说不知道为什么会这样.在我使用的任何其他语言中,无论"testChar = ..."行引起什么问题,"hello world"仍会被打印,因此我可以确定问题所在.

我的问题是为什么在我编程C时会发生这种情况?为什么不首先打印你好世界?其次,有没有比这更好的C编程调试技术完成相同的基本操作?如何,一个简单/直观的方法来找到有问题的代码行?

编辑:我偶然给了一个工作的例子哈哈.我现在拥有的应该是一个段错误.有趣的是,通常当我想要一个段落错误时,我得到一个,现在当我真正想要一个我编写法律代码时!

c debugging segmentation-fault printf-debugging

3
推荐指数
3
解决办法
3174
查看次数

对于以printf作为参数的循环

我无法理解为什么以下代码输出10.我的理解是,!printf("0")手段!0,这是TRUE.那么为什么不打印代码呢?"Sachin"

#include <stdio.h>

int main() {
    for (printf("1"); !printf("0"); printf("2"))
        printf("Sachin");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

产量

10
Run Code Online (Sandbox Code Playgroud)

c for-loop printf-debugging

1
推荐指数
1
解决办法
202
查看次数

花括号内的变量声明

为什么以下代码会产生错误?我不明白为什么花括号会有所作为.

#include<stdio.h>

int main(void)
{
    {
        int a=3;
    }

    {
        printf("%d", a); 
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c curly-braces variable-declaration printf-debugging

-2
推荐指数
1
解决办法
186
查看次数