小编sda*_*aau的帖子

如何在GDB中"重新加载"源文件

是否有一个命令gdb,我可以用来(重新)加载/"刷新"源文件?(据我所知,gdb只能使用源目录,根据使用GDB调试:源代码 - 并且没有特定的命令来"刷新")

关于我的问题的背景:

我使用带有调试内核的虚拟机,因此我可以连接到本地实例gdb,并可以调试内核模块.这些模块使用调试信息进行编译,这指定了保存模块源的文件夹(指示GDB 6.5使用嵌入在目标文件中的源 - Stack Overflow).我在VM和本地计算机的相同路径中都有源目录.

问题是这个 - 我需要做很多步骤才能使模块进入段错误 - 并且远程gdb进入堆栈.然后我做了一个回溯,我可以看到引用的源文件,即

#0  0xc0132a13 in ?? ()
#1  0xc056e551 in ?? ()
#2  0xc056e506 in ?? ()
#3  0xd8be53f3 in mymodule_func1 (var1=0xd79f9b44, var2=0x0, var3=825269148)
    at /media/src/mymodule.h:954
#4  0xd8be53d0 in mymodule_func2 (data=3617561412)
    at /media/src/mymodule.h:936
#5  0xc014fe87 in ?? ()
#6  0xc0151478 in ?? ()
Run Code Online (Sandbox Code Playgroud)

然后我试着说,list /media/src/mymodule.h:954- 我意识到我已经改变了本地版本的mymodule.h文件!!

所以我撤消了这些变化 - 但不幸的是,GDB没有看到这些变化!而且,当然,我不想重新启动GDB - 因为这意味着我必须重新启动VM,并完成整个过程以使内核模块再次发生段错误:( …

gdb linux-kernel

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

如何可视化包含/指向彼此的C结构图?

我正在使用Ubuntu 10.04,并研究内核对象的编程.

我遇到了一些相当复杂的结构,我很难阅读,所以我想我会尝试找一些可以帮助我想象它们的工具.

到目前为止我唯一能找到的是VCG,它有一个C Struct Visualization Example,如下所示:

这看起来像我想要使用的东西.

第一件事是,为Ubuntu打包的最后一个VCG是耐用的vcg(1.30debian-6) - 但.deb包可以在没有问题的情况下下载并安装在Ubuntu Lucid中.

但是,看起来这个包只是一个VCG 查看器(类似于vcgviewer,我猜).该vcgviewer页笔记:

To generate compiler graph data with newest gcc compilers use:
gcc -g -da -dv -fdump-tree-original-raw -fdump-tree-all-all 
Run Code Online (Sandbox Code Playgroud)

因此,显然我必须gcc在编译时使用这些开关,以从C源生成.vcg图形文件.

然而,问题是我正在构建一个只引用Linux头的内核模块 - 因为我尽量避免重新编译整个内核.看来,只要我尝试-fdump-tree-...在该上下文(内核模块)中使用开关,gcc就想开始编译内核的其余部分!(并且在.vcg图的编译和生成中显然都失败了 - 因为我没有内核源代码,只有头文件)

所以我的问题是 - 是否有一个工具,可以生成.vcg或.dot结构图 - 只需使用纯文本头文件作为输入?(它不必解析所有依赖项 - 只是在同一目录中的头文件中)

编辑:对我来说,后端特别是.vcg或.dot对我来说实际上并不重要,我提到它们只是因为到目前为止我找到了它们; 任何类型的软件,允许类似的结构可视化,无论后端,欢迎:)

PS:请注意,如果您不想使用VCG查看器查看.vcg图表,则可以将.vcg格式转换为.dot格式,graphviz而是使用可视化.什么工作对我来说是使用图形易- search.cpan.orgperl-这第一次拿到打包在Ubuntu与小牛版,作为libgraph易-perl的(然而,的.deb文件可以-再-下载并安装不Lucid的问题).libgraph-easy-perl …

c linux struct visualization

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

让git status显示未修改/未更改的跟踪文件?

这是一个简短的代码段示例(您可以将其粘贴到Linux终端中),创建一个新的git存储库并向其添加一些文件(使用git版本1.7.9.5):

cd /tmp/
mkdir myrepo_git
cd myrepo_git/
git init
git config user.name "Your Name"
git config user.email you@example.com
echo "test" > file_tracked_unchanged.txt
echo "test" > file_tracked_changed.txt
echo "test" > file_untracked.txt
git add file_tracked_unchanged.txt 
git add file_tracked_changed.txt
git commit -m "initial commit"
Run Code Online (Sandbox Code Playgroud)

现在,在初始提交之后,我想要更改file_tracked_changed.txt文件,并保持其他(此处,仅file_tracked_unchanged.txt)在下一次提交时保持不变.下面是一个片段,演示了git statusvs git ls-files(gitshell输出的前缀是多种输出#):

echo "test more" >> file_tracked_changed.txt

git status -uno
# # On branch master
# # Changes not staged for commit:
# # …
Run Code Online (Sandbox Code Playgroud)

git version-control

17
推荐指数
3
解决办法
1万
查看次数

检索用户空间Linux C代码中USB串行写传输的缓冲区/数据包/有效负载大小

提前道歉我不能立即接受答案 - 只是想我想记下来,而我有问题......

简而言之:当我在Linux下使用用户空间C代码启动对usb-serial端口的写入时,我可以观察到三种不同的缓冲区大小 - 问题是,我想从用户空间C中检索所有这些大小代码本身.


比方说,我有一个带有FTDI FT232芯片的Arduino Duemillanove,它被编程为从PC读取来自usb /串行连接的输入字节,然后丢弃它们.当我在系统中插入此设备时(在Ubunty 11.04 Natty上执行此操作),我可以通过以下方式观察以下内容tail -f /var/log/syslog:

Mar 21 08:05:05 mypc kernel: [  679.197982] usbserial: USB Serial Driver core
Mar 21 08:05:05 mypc kernel: [  679.223954] USB Serial support registered for FTDI USB Serial Device
Mar 21 08:05:05 mypc kernel: [  679.227354] ftdi_sio 2-2:1.0: FTDI USB Serial Device converter detected
Mar 21 08:05:05 mypc kernel: [  679.227633] usb 2-2: Detected FT232RL
Mar 21 08:05:05 mypc kernel: [  679.227644] usb 2-2: Number …
Run Code Online (Sandbox Code Playgroud)

c linux buffer usbserial packet

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

Linux内核add_timer的可靠性在一个jiffy的分辨率?

在下面给出的代码中,有一个简单的Linux内核模块(驱动程序),它add_timer以1 jiffy的分辨率重复调用一个函数10次(也就是说,计时器计划发射jiffies + 1).使用该bash脚本rerun.sh,然后从打印输出中获取时间戳syslog,并使用它来显示它们gnuplot.

在大多数情况下,我得到这样的syslog输出:

[ 7103.055787] Init testjiffy: 0 ; HZ: 250 ; 1/HZ (ms): 4
[ 7103.056044]  testjiffy_timer_function: runcount 1 
[ 7103.060045]  testjiffy_timer_function: runcount 2 
[ 7103.064052]  testjiffy_timer_function: runcount 3 
[ 7103.068050]  testjiffy_timer_function: runcount 4 
[ 7103.072053]  testjiffy_timer_function: runcount 5 
[ 7103.076036]  testjiffy_timer_function: runcount 6 
[ 7103.080044]  testjiffy_timer_function: runcount 7 
[ 7103.084044]  testjiffy_timer_function: runcount 8 
[ 7103.088060]  testjiffy_timer_function: runcount 9 
[ 7103.092059]  testjiffy_timer_function: runcount …
Run Code Online (Sandbox Code Playgroud)

linux timer linux-kernel

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

Firefox:找到特定附加/扩展的位置?

我正在使用Firefox 5,我已经知道扩展名位于Profile文件夹extensions文件夹中 ...但是,我需要找到特定扩展名(例如,CoLT)的位置; 问题是大多数扩展文件夹都是由guid命名的,例如

extensions$ ls
{232ac1d3-4d70-4919-8338-48c3d3f98afc}
{29c4afe1-db19-4298-8785-fcc94d1d6c1d}
{2bfc8624-5b8a-4060-b86a-e78ccbc38509}
{33f141c0-3703-4a4c-b459-cec618a7dafd}
...
Run Code Online (Sandbox Code Playgroud)

然后再说:" 从Gecko 2.0(Firefox 4/Thunderbird 3.3/SeaMonkey 2.1)开始,安装扩展时不再解压缩XPI文件.而是将XPI本身放在扩展目录中,文件直接加载到包. "(扩展包装 - MDN文档)......

由于XPI基本上是一个ZIP存档,因此请浏览extensions文件夹,查找扩展名:

extensions$ grep -ri 'colt' . 
Run Code Online (Sandbox Code Playgroud)

......什么都不会回报

那么,有没有人知道一个方法(或扩展名)告诉我究竟哪个XPI(或解压缩文件夹)是位于/加载的特定扩展名?

firefox firefox-addon

14
推荐指数
1
解决办法
3万
查看次数

Python - 用科学计数法修正指数?

请考虑以下Python代码段:

for ix in [0.02, 0.2, 2, 20, 200, 2000]:
  iss=str(ix) + "e9"
  isf=float(iss)
  print(iss + "\t=> " + ("%04.03e" % isf ) + " (" + str(isf) + ")")
Run Code Online (Sandbox Code Playgroud)

它生成以下输出:

0.02e9  => 2.000e+07 (20000000.0)
0.2e9   => 2.000e+08 (200000000.0)
2e9     => 2.000e+09 (2000000000.0)
20e9    => 2.000e+10 (20000000000.0)
200e9   => 2.000e+11 (2e+11)
2000e9  => 2.000e+12 (2e+12)
Run Code Online (Sandbox Code Playgroud)

 

我的问题是 - 是否有可能以某种方式"回去"?那是:

2.000e+07 => 0.02e9 
2.000e+08 => 0.2e9
2.000e+09 => 2e9    
2.000e+10 => 20e9   
2.000e+11 => 200e9  
2.000e+12 => 2000e9 
Run Code Online (Sandbox Code Playgroud)

......我指定我希望指数为" e+09"; …

python scientific-notation format-specifiers

14
推荐指数
1
解决办法
3万
查看次数

在Python中读取带超时的文件

在Linux中,有一个文件,/sys/kernel/debug/tracing/trace_pipe顾名思义,它是一个管道.所以,假设我想用Python读取它的前50个字节 - 我运行以下代码:

$sudo python -c 'f=open("/sys/kernel/debug/tracing/trace_pipe","r"); print f; print f.read(50); f.close()<br>
<open file '/sys/kernel/debug/tracing/trace_pipe', mode 'r' at 0xb7757e90>
Run Code Online (Sandbox Code Playgroud)

我们可以看到打开文件的速度很快(如果我们拥有超级用户权限) - 但是,如果该trace_pipe文件在那时是空的,它将只是阻塞(即使有内容,内容也将被转储,直到没有更多,然后再次文件将阻止).然后我必须按Ctrl- CKeyboardInterrupt... 中断Python脚本

如何让Python 2.7执行超时读取?

也就是说,我想指示Python "尝试从这个文件中读取50个字节;如果你在一秒钟后没有成功,就放弃并返回"

python linux python-2.7

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

Linux C:从源代码中轻松&'漂亮'转储/打印输出结构(如在gdb中)?

我正在构建一个内核模块中的一些结构略有问题,所以我认为如果有一种简单的方法来打印结构及其值,那将是很好的 - 以下是一个很小的用户态的例子我的意思.

假设我们有如下的简单C示例(以bash命令的形式给出):

FN=mtest

cat > $FN.c <<EOF
#include <stdio.h> //printf
#include <stdlib.h> //calloc

struct person
{
 int age; 
 int height; 
};

static struct person *johndoe;

main ()
{

 johndoe = (struct person *)calloc(1, sizeof(struct person));
 johndoe->age = 6; 

 asm("int3"); //breakpoint for gdb

 printf("Hello World - age: %d\n", johndoe->age);

 free(johndoe);
}
EOF

gcc -g -O0 $FN.c -o $FN

# just a run command for gdb
cat > ./gdbcmds <<EOF
run
EOF

gdb --command=./gdbcmds ./$FN 
Run Code Online (Sandbox Code Playgroud)

 

如果我们运行这个例子,程序将编译,gdb将运行它,并自动停在断点处.在这里我们可以做到以下几点:

Program received signal …
Run Code Online (Sandbox Code Playgroud)

c linux printing struct gdb

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

在Python 3中禁止打印输出"Exception ... ignored"消息

Python中存在一个已知问题,当stdout上发生"Broken pipe"时,"文件对象析构函数中的关闭失败" - Python跟踪器问题11380 ; 在python中也可以看到- 为什么我的Python3脚本无法将其输出连接到head或tail(sys模块)?- Stack Overflow.

我想要做的是,在Python 2.7和Python 3+中打印出同样的自定义消息.所以我准备了一个测试脚本testprint.py并运行它(显示在bashUbuntu 11.04 中完成的片段):

$ cat > testprint.py <<"EOF"
import sys

def main():
  teststr = "Hello " * 5
  sys.stdout.write(teststr + "\n")

if __name__ == "__main__":
  main()
EOF

$ python2.7 testprint.py 
Hello Hello Hello Hello Hello 

$ python2.7 testprint.py | echo

close failed in file object destructor:
sys.excepthook is missing
lost sys.stderr

$ python3.2 testprint.py | echo

Exception IOError: (32, …
Run Code Online (Sandbox Code Playgroud)

python bash python-2.7 python-3.x

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