Tag: 调试

Eclipse CDT中的方法/function断点

我正在调试为调试而编译的可执行文件(没有源代码)。 GDB可以选择在特定function上设置断点,例如break division() 有没有办法在Eclipse CDT中做同样的事情??? 谢谢 !

eclipse调试模式下的GDB找不到stdlib / rand.c

我试图让gdb在ubuntu上运行eclipse cdt来开始调试一些简单的程序。 所以我做了必要的步骤以使其运行: 1.创建可执行项目 2.编译 3.跑 4.创建文件.gdbinit并将其放在主项目文件夹中 5.设置一些调试器配置 : 5.我还试图找到一个看起来像这样的.gdbinit文件: set schedule-multiple dir ~/gcc_build/4.7.2/build/gcc dir ~/gcc_build/4.7.2/gcc dir ~/gcc_build/4.7.2/gcc/cp dir ~/gcc_build/4.7.2/gcc/lto source ~/gcc_build/4.7.2/build/gcc/gdbinit.in 但是我的计算机中没有发现类似的东西,即使在做了以下情况之后: # find / -name .gdbinit 所以,我的文件.gdbinit最终得到了简单的内容 – 是的只有: set new-console on 然后我点击了Apply和Debug: gdb按预期开始正常工作。 我按下“step over / F6”按钮,调试器逐步跳过代码。 直到它到达命令rand()并且gdb挂起并显示消息: Can’t find a source file at “/build/buildd/eglibc-2.19/stdlib/rand.c” Locate the file or edit the source […]

未初始化的内存用于调试的常见值是什么?

很久以前我学会了用0xDEADBEEF填充未使用/未初始化的内存,以便在调试器或崩溃报告中,如果我看到该值,我知道我正在查看未初始化的内存。 我从崩溃报告中看到iOS使用0xBBADBEEF 。 人们使用了哪些其他创造性价值观? 任何特定的价值观都有任何特定的好处吗? 变成单词的价值最明显的好处是,至少在大多数人中,如果单词是用他们的语言,那么他们很容易突出,因为某些严格的数值不太可能突出。 但是,也许有其他理由选择数字? 例如,奇数可能会使处理器(68000)崩溃,例如在某些内存访问时崩溃,因此最好选择0x0BADBEEF超过0xBADBEEF0 。 他们的任何其他值(可能是处理器特定的)是否具有使用未初始化内存的具体好处?

libdtrace缓冲输出

我试图通过libdtrace使用dtrace(在Snow Leopard上; 10.6.4)。 我想在我自己的程序中捕获我的dtrace脚本的打印输出。 一种方法是将输出转到临时文件并从那里读取。 但是,libdtrace支持一个回调函数来直接捕获我更喜欢的输出。 我假设回调只会传递我可以使用的格式化字符串,但似乎并非如此。 例如,在下面的测试程序中,我希望打印输出为“process pid = 86138”。 但是,它始终打印出“process pid = 1”(当使用’dtrace -n’运行时,dtrace脚本正常工作)。 我究竟做错了什么 ? 我应该如何使用传递给缓冲区处理程序的数据? (具体来说,来自printf和tracemem动作的数据是我感兴趣的)。 #include #include #include #include #include #include #include #include #include static const char *g_prog = “pid86138::write:entry” “{” ” printf(\”process pid = %d\\n\”, pid);” “}”; static int dcmdbuffered(const dtrace_bufdata_t *bufdata, void *arg) { if((bufdata->dtbda_recdesc != NULL) && […]

如何按名称(字符串)搜索和排序BST? 按队列打印并缩进?

我必须编写一个程序,将.txt文件读入树中,然后允许用它执行特定的操作。 我被困在我需要按名称排序树并按名称搜索的部分,任何输入都会很棒。 所以,我的输入文件格式为: 3800 Lee, Victor; 2.8 3000 Brown, Joanne; 4.0 所以,我的二叉树格式为: typedef struct { int id; char name[MAX_NAME_LEN]; float gpa; } STUDENT; typedef struct node { STUDENT* dataPtr; struct node* left; struct node* right; } NODE; typedef struct { int count; int (*compare) (void* argu1, void* argu2); // Was provided by teacher, not really […]

我可以从Visual Studio立即窗口调用Win32 API吗?

我正在调试一个C ++ Win32应用程序,我想从该进程的上下文中调用一个任意的Win32 API,就好像该程序运行了这行代码: DestroyWindow(0x00021c0e); 但是进入立即窗口会给出: CXX0017: Error: symbol “DestroyWindow” not found 编辑:使用函数的全名{,,user32.dll}_NtUserDestroyWindow@4 ,我可以使用立即窗口来了解我的意思,并显示函数的地址: {,,user32.dll}_NtUserDestroyWindow@4 0x76600454 _NtUserDestroyWindow@4 但当我尝试调用它时,会发生这种情况: {,,user32.dll}_NtUserDestroyWindow@4(0x00021c0e); CXX0004: Error: syntax error 甚至可以像这样从立即窗口调用C函数,还是我咆哮错误的树?

需要一个工具来检测C代码中的内存泄漏

是否有一个很好的应用程序(有某种gui)来测试c代码中的内存泄漏。 我真的想测试我的作业/程序,但对此非常新,我很难使用终端来做事情,特别是使用gdb进行调试(对我而言,感觉就像过去的爆炸,我可以使用一些可视调试器)。 谢谢您的帮助 编辑:平台没关系 – 我正在运行一切;)

printf()使用字符串表“解码器环”调试库

我写信是为了看看你们中是否有人见过或听说过我将要描述的想法的实现。 我有兴趣为嵌入式目标开发一个printf样式的调试库。 目标是非常远程的,我和目标之间的通信带宽预算非常紧张,所以我希望能够以非常有效的格式获得调试消息。 通常,调试语句类似于以下内容: myDebugLibraryPrintf(“Inside loop, processing item %d out of %d.\n”, i, numItems); 当然,当它被扩展为文本时,打印的字符串类似于“内部循环,处理项目5中的10个\ n”,总共约42个字节左右。 此语句打印出的90%以上的数据是静态的,字面的 – 在编译时已知。 当然,在编译时只知道“5”和“10”。 我想做的是只能回发那两个整数(8个字节而不是42个)。 一旦我收到了这些数据,我就会有一些“解码器响铃”让我“重新构建”收到的数据并在我的位置打印出完整的调试信息。 我会自动生成“解码器环”(作为构建过程的一部分),在编译时为每个myDebugLibraryPrintf()语句提供一个唯一的ID,并生成一个将这些唯一ID映射到原始格式字符串的表。 然后,只要在目标上调用myDebugLibraryPrintf(),它就会传输唯一ID以及格式字符串中看到的任何”%d” , “%f”等varargs值,但格式字符串本身不会被传输。 (我现在可能只是禁止”%s”项目…)回到我的位置,我们将有一个程序查找表中的唯一ID,找到相应的格式字符串,并用它来重建原始调试消息。 我觉得以前有人可能有过这个想法,我想社区中的某个人可能会看到类似的东西(或者甚至知道这样做的开源库)。 约束: 为了澄清,我在这里处理C / C ++,我对printf()的100%完全替换实现不感兴趣 – 例如非文字格式字符串, %s (字符串)格式说明符,或者更高级的格式说明符,例如将宽度或精度放在带有%*.*d的varargs列表中,不需要支持。 我希望字符串表作为构建过程的一部分自动生成,因此添加调试不会比添加传统的printf()更多的工作。 如果需要超过最小努力量,我项目中的任何人都不会使用它。 在生成字符串表的构建过程中做额外的工作几乎是假定的。 幸运的是,我控制了我对使用这个库感兴趣的所有源代码,并且我在构建过程中有很多灵活性。 谢谢!

gcc -g调试标志是否影响程序执行?

我刚刚测试了一个我正在工作的程序,当我用-g编译它时,我发现它的执行速度提高了3μs(统计上显着的变化)。 这对我来说毫无意义 – 我认为-g标志不应该影响程序执行,即使它做了它也会使它运行得更慢,而不是更快。 谁能告诉我为什么会这样? 它是否改变了程序的执行流程? 我没有使用-O进行编译,因为我需要它完全按照写入执行,但如果-g可以通过更改指令顺序以某种方式使其运行得更快我显然应该使用它。 所以我需要确切知道-g标志对程序的更改。 编辑:我运行的测试越多,t值越大(=差异变得越有统计意义)。 这绝对不是测量误差 – 事情正在发生。

什么是特权教育?

我添加了一些编译干净,刚收到此Windows错误的代码: ————————— (MonTel Administrator) 2.12.7: MtAdmin.exe – Application Error ————————— The exception Privileged instruction. (0xc0000096) occurred in the application at location 0x00486752. 我即将继续寻找一个bug,我期待它是一件愚蠢的事情,我已经完成了这件事,恰好产生了这个消息。 代码编译干净,没有错误或警告。 EXE文件的大小已增长到1,454,132字节并包含指向ODCS.lib链接,但它是纯粹的C到Win32 API,DEBUG打开(在Windows 2000上的P4上运行)。