【发布时间】:2009-08-10 12:51:35
【问题描述】:
我正在运行一个对文件进行处理的程序。 我希望能够为程序提供多个文件,并通过使用 gdb 附加到它,我希望在每个文件的代码中的某个点获得内存转储。我希望每个文件的转储转到与输入文件具有相同文件名的文件(可能在稍微格式化后,比如添加后缀)
所以假设我有一个名为 HereIsTheFileName(char* filename) 的函数和另一个名为 DumpThisMemoryRegion(void* startAddr, void* endAddr) 的函数,我想做如下的事情:
获取文件名到环境变量:
- 打破 HereIsTheFileName
- 命令 1
- 设置 $filename = malloc(strlen(filename) + 1)
- 调用 memcpy($filename, filename, strlen(filename) + 1)
- 结束
然后将内存转储到我之前保存的文件名:
- 中断 DumpThisMemoryRegion
- 命令 2
- 追加二进制内存“%s.memory”%$filename startAddr endAddr
- 结束
(我什至会按原样选择文件名,不进行格式化,如果这被证明是困难的部分)
但是,除了附加/转储命令的显式文件名之外,我无法让 gdb 接受任何内容。当我运行“附加二进制内存 $filename ...”时,我在文件“/workdir/$filename”中得到了输出。 有没有办法让gdb在运行时选择文件名?
谢谢!
【问题讨论】:
标签: gdb