Tag: 调试

Win32 Api函数的调试中断

我想在SetTimer函数上rest一下,看看哪些组件使用什么值来记录哪些计时器。 这可能吗?

如何将函数地址映射到* .so文件中

backtrace函数给出一组回溯如何用函数名/文件名/行号映射它? for ex:- backtrace() returned 8 addresses ./libtst.so(myfunc5+0x2b) [0xb7767767] ./libtst.so(fun4+0x4a) [0xb7767831] ./libtst.so(fun3+0x48) [0xb776787f] ./libtst.so(fun2+0x35) [0xb77678ba] ./libtst.so(fun1+0x35) [0xb77678f5] ./a.out() [0x80485b9] /lib/libc.so.6(__libc_start_main+0xe5) [0xb75e9be5] ./a.out() [0x80484f1] 从上面的堆栈我怎样才能获得文件名和行号? 我做了以下事情,但没有运气。 如果我错了,请纠正我:) for ex:- ./libtst.so(fun2+0x35) [0xb77dc887] 0xb77dc887(fun2 addr+offset)-0xb77b6000 (lib starting addr) = 0x26887 (result) result is no way related to function in nm output. I used addr2line command:- addr2line -f -e […]

如何在项目中实现良好的调试/日志记录function

我正在做一个小项目,总共约3-4人。 我希望有一个可靠的方法来调试应用程序,例如日志。 是否有任何关于如何构建它的好资源? 我从项目经理那里听到很多好的日志记录function对每个项目都很重要,但我不知道该怎么做。

任何人都可以帮我解释WinDbg中这个简单的反汇编吗?

我得到了以下简单的C ++代码: #include int main(void) { ::printf(“\nHello,debugger!\n”); } 从WinDbg,我得到了以下反汇编代码: SimpleDemo!main: 01111380 55 push ebp 01111381 8bec mov ebp,esp 01111383 81ecc0000000 sub esp,0C0h 01111389 53 push ebx 0111138a 56 push esi 0111138b 57 push edi 0111138c 8dbd40ffffff lea edi,[ebp-0C0h] 01111392 b930000000 mov ecx,30h 01111397 b8cccccccc mov eax,0CCCCCCCCh 0111139c f3ab rep stos dword ptr es:[edi] 0111139e 8bf4 […]

如何在gdb中加载多个符号文件

如何在gdb加载多个符号文件。 我有一个可执行文件foo.out并加载模块bar.so. 我创建了两个符号文件foo.symbol和bar.symbol。 如何将这两个文件加载到gdb中。 # gdb –core core # (gdb) # (gdb) symbol-file foo.symbol 如何加载第二个符号文件。 或者有没有办法在gdb加载目录的所有文件

#define DEBUG 1

我正在尝试调试模式,如果 #define DEBUG 1 我想printf一些变量值和if #define DEBUG 0 我希望他们离开 问题是我有很多实现文件,我希望这个DEBUG变量可用于整个项目。 现在我需要在foo1.c,foo2.c,foo3.c中编辑DEBUG变量,这似乎很乏味且容易出错,而且必须有更好的方法。 有什么建议?

gprof:如何为链接到主程序的共享库中的函数生成调用图

我正在研究Linux环境。 我有两个’C’源包train和test_train。 编译时训练包生成libtrain.so test_train链接到libtrain.so并生成可执行的train-test 现在我想用gprof生成一个调用图,它显示了主程序中函数的调用顺序以及libtrain.so中的函数调用顺序。 我正在使用-pg选项编译和链接两个包,调试级别为o0。 在我执行./train-test之后,生成gmon.out。 然后我做: $ gprof -q ./train-test gmon.out 这里,输出显示列车测试中的函数调用图,但不显示libtrain.so中的调用图 可能是什么问题呢 ?

如何让gdb跟随execv? 尽管“跟随执行模式”不工作

我写了两个简单的程序: int main(int ac, char **argv ) { execv( “/home/me/Desktop/execvtest2”, argv ); } 和 int main(int ac, char **argv ) { execv( “/home/me/Desktop/execvtest1”, argv ); } 我用gcc -g将它们编译成相应的输出文件。 我使用gcc(Ubuntu / Linaro 4.4.4-14ubuntu5.1)4.4.5运行Ubuntu 10.10。 当我使用GNU gdb(GDB)7.2-ubuntu调试第一个程序时,我可以直到第一个execv语句,但随后两个文件继续运行。 即使我将follow-exec-mode设置为new,我也无法进入第二个程序。 当我设置catch exec时,gdb会在每次调用execv时停止(某些如何没有第二个程序的链接源,我无法退出gdb,因为它有点挂起!?),但我无法跳过调用“新”(作为exec替换过程)的劣质程序。 那怎么办呢? 必须有一种方法可以进入新的流程吗? 难道我做错了什么? 干杯

pthread_mutex_lock返回无效参数

我正在研究一些C代码,并且遇到锁定互斥锁的问题。 代码调用一个函数,这个函数锁定一个互斥锁,以确保文件指针不被覆盖,这适用于几个实例,可能大约10-20个单独调用被调用函数,但在下一次调用时,pthread_mutex_lock将返回22的结果。然后我将此结果放入strerror(); 并得到了无效的论点。 无效参数意味着什么,感谢您提供的任何帮助。

GDB无法插入断点,无法访问地址XXX的内存?

我写了一个非常简单的程序: ebrahim@ebrahim:~/test$ cat main.c int main() { int i = 0; return i; } 我用-s编译剥离模式: ebrahim@ebrahim:~/test$ gcc -s main.c -o f3 ebrahim@ebrahim:~/test$ file f3 f3: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=4dc6b893fbae8b418ca41ddeef948df1fcb26d3d, stripped 现在,我正在尝试使用GDB找出主函数起始地址: ebrahim@ebrahim:~/test$ gdb -nh f3 GNU gdb (Ubuntu 7.11.90.20161005-0ubuntu2) 7.11.90.20161005-git Copyright (C) […]