这接近于使用GCC生成可读组件?,但我的上下文是avr-gcc
(并相应地avr-objdump
)Atmel(虽然,我想它将适用于GCC董事会).
问题是,我有一个多个.c和.cpp文件的项目; 最终被编译成可执行文件,其名称与'master'.cpp文件相同.在这个过程中,我可以通过两种方式获得汇编列表:
gcc
发出汇编列表源(参见Linux汇编和反汇编和简介)-S
; 在这种情况下,我得到一个文件,内容如下:... loop: push r14 push r15 push r16 push r17 push r28 push r29 /* prologue: function / / frame size = 0 */ ldi r24,lo8(13) ldi r22,lo8(1) call digitalWrite rjmp .L2 .L3: ldi r24,lo8(MyObj) ldi r25,hi8(MyObj) call _ZN16MYOBJ7connectEv .L2: ldi r24,lo8(MyObj) ldi r25,hi8(MyObj) call _ZN16MYOBJ11isConnectedEv ...
(还没有尝试过;但我想这段代码是可编译的/可构建的....)
objdump
使用该-S
开关发出汇编列表源; 在这种情况下,我得到一个文件,内容如下:... 0000066a <init>: void init() { …
我猜这对于那些了解Perl的人来说应该是显而易见的,但是我根本就没有得到它......我也猜测它与Perl范围内描述的问题有关«黑暗 - 但我不能在我的案例中应用任何问题.
无论如何,这是代码:
#!/usr/bin/env perl
# call with:
# ./test.pl
use strict;
my $tvars = "my \$varA = 1;
my \$varB = 2;
my \$varC = 3;
";
my @lines = split /\n/, $tvars;
foreach my $line (@lines) {
print "$line\n";
eval $line; warn $@ if $@;
}
#~ print "$varA\n"; # Global symbol "$varA" requires explicit package name at ./test.pl line 18.
#~ print "$varB\n"; # Global symbol "$varB" requires explicit package name at ./test.pl …
Run Code Online (Sandbox Code Playgroud) 说我有这个文件:
cat > test.txt <<EOF
line one word
line two word
line three word
line one two word
EOF
Run Code Online (Sandbox Code Playgroud)
让我们说我想用'TWO'替换所有单词'two',在文件中就地内联 .test.txt
现在,我所做的通常是构建一个"预览"(-n
不打印行,然后使用/p
- 仅打印匹配的行):
$ sed -n 's/two/TWO/gp' test.txt
line TWO word
line one TWO word
Run Code Online (Sandbox Code Playgroud)
...然后我通常执行实际的就地替换(有-i
和没有/p
):
$ sed -i 's/two/TWO/g' test.txt
$ cat test.txt
line one word
line TWO word
line three word
line one TWO word
Run Code Online (Sandbox Code Playgroud)
有没有办法sed
在一个文件中就地更改行,并从一个命令行打印更改的行到stdout?
我通常将其ghostscript
视为命令行工具; 然而,我从不停止对那里存在的大量设置和选项感到惊讶 - 这是因为这ghostscript
是一个完整的PostScript语言解释器(我经常忘记).
例如,在查询Ghostscript中输出设备的默认选项/设置(例如'pdfwrite'或'tiffg4') ; 一个人学习如何检索给定输出设备的默认选项.但是,我想知道的是 - 这些选项是否与所谓的PostScript词典相关?
或者,换句话说 - 什么是PostScript词典; 什么设施ghostscript
有,查询(并可能)修改这些数据?
我试图在 Windows 10 机器上通过 MSYS2 shell 安装 Jupyter(根据https://jupyter.org/install,“使用 pip 安装 Jupyter”) - 并且进程崩溃了;然后我发现了这个:
jupyter notebook 无法启动 · Issue #1540 · msys2/MSYS2-packages · GitHub
您需要从 mingw64 shell 启动 jupyter notebook,而不是从 msys2 shell。对我来说,一个简单的 jupyter 笔记本可以按预期工作。
好的,所以我想尝试 MINGW64 shell。
请注意,在 MSYS2 外壳中:
user@DESKTOP-PC MSYS /c/
$ python3 -m pip install --upgrade pip
Collecting pip
Downloading https://files.pythonhosted.org/packages/5c/e0/be401c003291b56efc55aeba6a80ab790d3d4cece2778288d65323009420/pip-19.1.1-py2.py3-none-any.whl (1.4MB)
|????????????????????????????????| 1.4MB 2.3MB/s
Installing collected packages: pip
Found existing installation: pip 19.1
Uninstalling pip-19.1:
Successfully uninstalled pip-19.1
Successfully installed pip-19.1.1
Run Code Online (Sandbox Code Playgroud)
因此,pip 在 MSYS2 shell …
我通常最终会遇到以下情况:例如,我有一个来自相机的650 MB MPEG-2 .avi视频文件.然后,我使用ffmpeg2theora将其转换为Theora .ogv视频文件,比如说大小为150 MB.最后,我想将此.ogv文件上传到ssh
服务器.
比方说,ffmpeg2theora
我的电脑上的编码过程大约需要15分钟.另一方面,上传速度约为60 KB/s,大约需要45分钟(150MB .ogv).所以:如果我先编码,并等待编码过程完成 - 然后上传,则需要大约
15 min + 45 min = 1 hr
Run Code Online (Sandbox Code Playgroud)
完成操作.
所以,我认为如果我能以某种方式开始上传,与编码操作并行,那会更好; 然后,原则上-作为上传过程较慢(在传输的字节/秒计),比编码一个(在生成的字节/秒计) -上载过程将总是编码一个"后面线索",所以整个操作(enc + upl)将在45分钟内完成(也就是说,只需上传过程的时间+/-几分钟,具体取决于线路上的实际上传速度情况).
我的第一个想法是管道输出ffmpeg2theora
到tee
(以便保留.ogv的本地副本),然后,将输出进一步管道输入ssh
- 如下所示:
./ffmpeg2theora-0.27.linux32.bin -v 8 -a 3 -o /dev/stdout MVI.AVI | tee MVI.ogv | ssh user@ssh.server.com "cat > ~/myvids/MVI.ogv"
Run Code Online (Sandbox Code Playgroud)
虽然这个命令确实具有功能 - 人们可以很容易地在终端的运行日志中看到ffmpeg2theora
,在这种情况下,ffmpeg2theora
计算预测的完成时间为1小时; 也就是说,对于enc + upl的较小完成时间似乎没有任何好处.(虽然这可能是由于网络拥塞,而且我当时的网络速度降低了 - 在我看来,它ffmpeg2theora …
好吧,情况就是这样:我正在尝试使用一些较旧的软件:在Ubuntu Lucid上工作正常,在Natty上失败.
所以,我strace
喋喋不休,事实证明这个软件调用ld
,并ld
最终失败:
.../ld: crt1.o: No such file: No such file or directory
Run Code Online (Sandbox Code Playgroud)
...是的,旧的crti.o文件丢失错误:)但是,我想用更一般的术语提问...
问题是,这是"独立"(较旧)ld
,当我跑步时.../ld -verbose | less
,我得到:
...
SEARCH_DIR("/usr/local/lib");
SEARCH_DIR("/lib");
SEARCH_DIR("/usr/lib");
...
Run Code Online (Sandbox Code Playgroud)
现在,问题在于:
crt1.o
是在/usr/lib/crt1.o
crt1.o
是在/usr/lib/i386-linux-gnu/crt1.o
...所以,毫无疑问,为什么crt1.o
无法找到,我想.看来,我所要做的,就是告诉ld
寻找crt1.o
在/usr/lib/i386-linux-gnu
,但我怎么做呢?
我以为我可以使用该-L
选项,但是man ld
说:
to link a file "hello.o":
ld -o <output> /lib/crt0.o hello.o -lc
This tells ld to produce a file called output as …
Run Code Online (Sandbox Code Playgroud) 我刚刚查看了JavaScript Timing Events,其中显示“第二个参数指示从现在开始多少毫秒后您要执行第一个参数。 ”
现在,我知道在 JavaScript 中,浮点和整数都是 类型Number
,因此从语法上讲,我可以输入浮点值,例如 ' setTimeout("javascript statement",4.5);
' - 但是,JavaScript 是否会尝试在那里创建 4.5 毫秒的延迟?或者它会自动截断为整数并继续?
预先感谢您的任何答复,
干杯!
我想以某种方式"监视"Linux内核中的变量(或内存地址)(确切地说是内核模块/驱动程序); 并找出改变它的原因 - 基本上,当变量改变时打印出堆栈跟踪.
例如,在本答案testjiffy-hr.c
末尾列出的内核模块中,我想在每次变量更改时打印出堆栈跟踪; 希望堆栈跟踪然后会包含提及,这确实是改变该变量的函数.runcount
testjiffy_timer_function
现在,我知道我可以使用kgdb
连接到运行在虚拟机中的调试Linux内核,甚至设置断点(所以希望也是观察点) - 但问题是我实际上想要调试ALSA驱动程序,特别是回放dma_area
缓冲区(我得到一些意想不到的数据) - 这对时间非常敏感; 并且运行调试内核本身会弄乱时间(更不用说在虚拟机中运行它)了.
这里更大的问题是回放dma_area
指针仅在回放操作期间(或者换句话说,在_start
和_stop
处理程序之间)存在 - 所以我必须dma_area
在每次_start
回调时记录地址,然后以某种方式"安排"它为"在播放操作期间观看.
所以我希望有一种方法可以直接在驱动程序代码中执行这样的操作 - 例如,在此_start
回调中添加一些记录dma_area
指针的代码,并将其用作命令的参数,该命令启动"监视"更改; 从相应的回调函数打印堆栈跟踪.(我知道这也会影响时间,但我希望它能够"轻松",不会过多地影响"实时"驱动程序操作).
所以我的问题是:在Linux内核中进行调试的这种技术是否存在?
如果不是:是否可以设置硬件(或软件)中断,该中断会对特定内存地址的更改做出反应?然后,我可以设置这样的中断处理程序,可以打印出堆栈跟踪吗?(虽然,我认为整个上下文在IRQ处理程序运行时会发生变化,因此可能会出现堆栈跟踪错误)?
如果没有:是否还有其他技术,这将允许我打印进程的堆栈跟踪,该跟踪更改存储在内核中给定内存位置的值(希望在实时的非调试内核中)?
我已经看到了从符号errno到String-Stack Overflow的问题,所以即使该问题bash
相关,我也已经知道这并不是一件小事。但是只是为了确认:
是否有一个C API函数,该函数strerror()
会接受数字errno
作为参数-但会打印助记符(例如EINVAL
)而不是错误描述字符串(例如“无效参数”)?
例如,我想
printf("Number: %d (%s): '%s'\n", 22, strerror_mnemonic(22), strerror(22) );
Run Code Online (Sandbox Code Playgroud)
... 打印:
Number: 22 (EINVAL): 'Invalid argument'
Run Code Online (Sandbox Code Playgroud)
...哪里strerror_mnemonic
是我要寻找的C函数的伪代码。
linux ×3
c ×2
assembly ×1
debugging ×1
dictionary ×1
eval ×1
filesize ×1
gcc ×1
ghostscript ×1
javascript ×1
ld ×1
linux-kernel ×1
mingw-w64 ×1
objdump ×1
object ×1
path ×1
perl ×1
pip ×1
postscript ×1
python ×1
rsync ×1
scope ×1
scp ×1
search ×1
sed ×1
shell ×1
stack ×1
timing ×1
upload ×1
variables ×1
windows-10 ×1